2.12. Camel Maven 플러그인


Camel Maven 플러그인은 다음 목표를 지원합니다.

  • Camel:run - Camel 애플리케이션을 실행하려면
  • Camel:validate - 잘못된 Camel 엔드포인트 URI에 대한 소스 코드 유효성 검사
  • Camel:route-coverage - 단위 테스트 후 Camel 경로 적용 범위 보고

2.12.1. Camel:run

Camel Maven 플러그인의 camel:run 목표는 Maven의 분기된 JVM에서 Camel Spring 구성을 실행하는 데 사용됩니다. 시작하기 위한 좋은 예제 애플리케이션은 Spring Example입니다.

cd examples/camel-example-spring
mvn camel:run

이렇게 하면 main(…​) 방법을 작성하지 않고도 라우팅 규칙을 매우 쉽게 실행하고 테스트할 수 있습니다. 또한 다양한 라우팅 규칙 세트를 호스팅하고 독립적으로 테스트할 수 있도록 여러 개의 Cryostat를 생성할 수 있습니다. Camel Maven 플러그인은 maven 프로젝트의 소스 코드를 컴파일한 다음 META-INF/spring/*.xml 의 classpath에서 XML 구성 파일을 사용하여 Spring ApplicationContext를 부팅합니다. Camel 경로를 조금 더 빠르게 부팅하려면 대신 camel:embedded 를 시도할 수 있습니다.

2.12.1.1. 옵션

Camel Maven 플러그인 실행 목표는 명령줄에서 구성 하거나 <configuration> 태그의 pom.xml 파일에 정의된 다음 옵션을 지원합니다.

매개변수

기본값

설명

duration

-1

애플리케이션이 종료되기 전에 실행되는 시간(초)을 설정합니다. 값이 0이면 영구적으로 실행됩니다.

durationIdle

-1

애플리케이션을 종료하기 전에 유휴 상태로 설정할 수 있는 유휴 시간(초) 기간을 설정합니다. 값이 0이면 영구적으로 실행됩니다.

durationMaxMessages

-1

종료하기 전에 애플리케이션이 처리하는 최대 메시지 수를 설정합니다.

logClasspath

false

시작할 때 classpath를 기록할 지 여부

2.12.1.2. Running OSGi Blueprint

camel:run 플러그인은 블루프린트 애플리케이션 실행을 지원하며 기본적으로 OSGI-INF/blueprint/*.xml 에서 OSGi 블루프린트 파일을 스캔합니다. 아래 표시된 대로 blueprint를 true로 사용하여 블루프린트를 사용하도록 camel:run 플러그인을 구성해야 합니다.

<plugin>
  <groupId>org.jboss.redhat-fuse</groupId>
  <artifactId>camel-maven-plugin</artifactId>
  <configuration>
    <useBlueprint>true</useBlueprint>
  </configuration>
</plugin>

이를 통해 Camel과 관련이 있는지 여부에 관계없이 원하는 블루프린트 서비스를 부팅할 수 있습니다. camel:run 목표는 카l-blueprint가 classpath에 있는지 또는 프로젝트에 블루프린트 XML 파일이 있는지 자동 감지할 수 있으므로 더 이상 useBlueprint 옵션을 구성할 필요가 없습니다.

2.12.1.3. 제한된 블루프린트 컨테이너 사용

Felix Connector 프로젝트를 블루프린트 컨테이너로 사용합니다. 이 프로젝트는 완전한 가상 블루프린트 컨테이너가 아닙니다. 이를 위해 Apache Karaf 또는 Apache ServiceMix를 사용할 수 있습니다. applicationContextUri 구성을 사용하여 다음과 같은 명시적 블루프린트 XML 파일을 지정할 수 있습니다.

<plugin>
  <groupId>org.jboss.redhat-fuse</groupId>
  <artifactId>camel-maven-plugin</artifactId>
  <configuration>
    <useBlueprint>true</useBlueprint>
    <applicationContextUri>myBlueprint.xml</applicationContextUri>
    <!-- ConfigAdmin options which have been added since Camel 2.12.0 -->
    <configAdminPid>test</configAdminPid>
    <configAdminFileName>/user/test/etc/test.cfg</configAdminFileName>
  </configuration>
</plugin>

applicationContextUri 는 classpath에서 파일을 로드하므로 위의 예제에서는 myBlueprint.xml 파일이 classpath의 루트에 있어야 합니다. configAdminPid 는 지속성 속성 파일을 로드할 때 구성 관리 서비스의 pid 이름으로 사용되는 pid 이름입니다. configAdminFileName 은 구성 관리자 서비스 속성 파일을 로드하는 데 사용할 파일 이름입니다.

2.12.1.4. CDI 실행

camel:run 플러그인은 CDI 애플리케이션 실행도 지원합니다. 이를 통해 Camel 관련 또는 기타 CDI 활성화 서비스 여부에 관계없이 원하는 CDI 서비스를 부팅할 수 있습니다. 선택한 CDI 컨테이너(예: Weld 또는 OpenWebBeans)를 이 예제와 같이 camel-maven-plugin의 종속 항목에 추가해야 합니다. Camel 소스에서 다음과 같이 CDI 예제를 실행할 수 있습니다.

cd examples/camel-example-cdi
mvn compile camel:run

2.12.1.5. classpath 로깅

camel:run 을 실행할 때 classpath를 로깅해야 하는지 여부를 구성할 수 있습니다. 다음을 사용하여 구성에서 이 기능을 활성화할 수 있습니다.

<plugin>
  <groupId>org.jboss.redhat-fuse</groupId>
  <artifactId>camel-maven-plugin</artifactId>
  <configuration>
    <logClasspath>true</logClasspath>
  </configuration>
</plugin>

2.12.1.6. XML 파일의 실시간 다시 로드 사용

XML 파일 변경 사항을 스캔하고 해당 XML 파일에 포함된 Camel 경로를 다시 로드하도록 플러그인을 구성할 수 있습니다.

<plugin>
  <groupId>org.jboss.redhat-fuse</groupId>
  <artifactId>camel-maven-plugin</artifactId>
  <configuration>
    <fileWatcherDirectory>src/main/resources/META-INF/spring</fileWatcherDirectory>
  </configuration>
</plugin>

그런 다음 플러그인은 이 디렉터리를 조사합니다. 이를 통해 편집기에서 소스 코드를 편집하고 파일을 저장하고 실행 중인 Camel 애플리케이션에서 해당 변경 사항을 활용할 수 있습니다. 지원되는 Camel 경로 변경(예: <routes> 또는 < route >)만 변경합니다. Spring 또는 OSGi 블루프린트 < bean> 요소는 변경할 수 없습니다.

2.12.2. camel:validate

다음 Camel 기능에 대한 소스 코드 검증의 경우:

  • 엔드포인트 URI
  • 간단한 표현식 또는 서술자
  • 중복 경로 ID

그런 다음 명령줄에서 camel:validate 목표를 실행하거나 IDEA 또는 Eclipse와 같은 Java 편집기에서 실행할 수 있습니다.

mvn camel:validate

이러한 오류를 파악하기 위해 플러그인을 빌드의 일부로 자동 실행하도록 활성화할 수도 있습니다.

<plugin>
  <groupId>org.jboss.redhat-fuse</groupId>
  <artifactId>camel-maven-plugin</artifactId>
  <executions>
    <execution>
      <phase>process-classes</phase>
      <goals>
        <goal>validate</goal>
      </goals>
    </execution>
  </executions>
</plugin>

단계는 플러그인이 실행되는 시기를 결정합니다. 위의 샘플에서 단계는 기본 소스 코드를 컴파일한 후 실행되는 프로세스 클래스입니다. maven 플러그인은 테스트 소스 코드의 유효성을 검사하도록 구성할 수도 있습니다. 즉, 다음과 같이 process-test-classes 에 따라 단계를 변경해야 합니다.

<plugin>
  <groupId>org.jboss.redhat-fuse</groupId>
  <artifactId>camel-maven-plugin</artifactId>
  <executions>
    <execution>
      <configuration>
        <includeTest>true</includeTest>
      </configuration>
      <phase>process-test-classes</phase>
      <goals>
        <goal>validate</goal>
      </goals>
    </execution>
  </executions>
</plugin>

2.12.2.1. 모든 Maven 프로젝트에서 목표 실행

pom.xml 파일에 플러그인을 추가하지 않고도 Maven 프로젝트에서 검증 목표를 실행할 수도 있습니다. 이렇게 하려면 정규화된 이름을 사용하여 플러그인을 지정해야 합니다. 예를 들어 Apache Camel의 camel-example-cdi 목표를 실행하려면 다음을 실행할 수 있습니다.

$cd camel-example-cdi
$mvn org.apache.camel:camel-maven-plugin:2.20.0:validate

그러면 다음을 실행하고 출력합니다.

[INFO] ------------------------------------------------------------------------
[INFO] Building Camel :: Example :: CDI 2.20.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- camel-maven-plugin:2.20.0:validate (default-cli) @ camel-example-cdi ---
[INFO] Endpoint validation success: (4 = passed, 0 = invalid, 0 = incapable, 0 = unknown components)
[INFO] Simple validation success: (0 = passed, 0 = invalid)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

검증이 통과되고 4개의 끝점이 검증되었습니다. 이제 다음과 같은 소스 코드에서 Camel 엔드포인트 URI 중 하나에 오타를 발생했다고 가정합니다.

@Uri("timer:foo?period=5000")

기간 옵션에 오타 오류를 포함하도록 변경됨

@Uri("timer:foo?perid=5000")

검증 목표를 다시 실행하면 다음이 보고됩니다.

[INFO] ------------------------------------------------------------------------
[INFO] Building Camel :: Example :: CDI 2.20.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- camel-maven-plugin:2.20.0:validate (default-cli) @ camel-example-cdi ---
[WARNING] Endpoint validation error at: org.apache.camel.example.cdi.MyRoutes(MyRoutes.java:32)

	timer:foo?perid=5000

	                   perid    Unknown option. Did you mean: [period]


[WARNING] Endpoint validation error: (3 = passed, 1 = invalid, 0 = incapable, 0 = unknown components)
[INFO] Simple validation success: (0 = passed, 0 = invalid)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

2.12.2.2. 옵션

Camel Maven 플러그인 검증 목표는 명령줄에서 구성 하거나 <configuration> 태그의 pom.xml 파일에 정의된 다음 옵션을 지원합니다.

매개변수

기본값

설명

downloadVersion

true

인터넷에서 Camel 카탈로그 버전을 다운로드할 수 있는지 여부입니다. 이 플러그인은 기본적으로 프로젝트에 다른 Camel 버전을 사용하는 경우 필요합니다.

failOnError

false

유효하지 않은 Camel 엔드 포인트가 발견되면 실패할지 여부입니다. 기본적으로 플러그인은 WARN 수준에서 오류를 기록합니다.

logUnparseable

false

비교할 수 없는 끝점 URI를 로깅할지 여부이므로 검증할 수 없습니다.

includeJava

true

잘못된 Camel 엔드포인트에 대해 검증할 Java 파일을 포함할지 여부입니다.

includeXml

true

잘못된 Camel 엔드포인트에 대해 검증할 XML 파일을 포함할지 여부입니다.

includeTest

false

테스트 소스 코드를 포함할지 여부입니다.

includes

 

지정된 패턴 목록(wildcard 및 정규식)과 일치하는 파일만 포함하도록 java 및 xml 파일의 이름을 필터링합니다. 여러 값을 쉼표로 구분할 수 있습니다.

excludes

 

지정된 패턴 목록(wildcard 및 정규식)과 일치하는 파일을 제외하도록 java 및 xml 파일의 이름을 필터링하려면 다음을 수행합니다. 여러 값을 쉼표로 구분할 수 있습니다.

ignoreUnknownComponent

true

알 수 없는 구성 요소를 무시할지 여부입니다.

ignoreIncapable

true

끝점 URI 또는 단순 표현식을 구문 분석할 수 없는 무시 여부입니다.

ignoreLenientProperties

true

lenient 속성을 사용하는 구성 요소를 무시할지 여부입니다. 이 값이 true인 경우 URI 유효성 검사가 더 빠름이지만 구성 요소의 일부가 아닌 속성에 대해 실패하지만 권한 있는 속성을 사용하므로 URI에서 실패합니다. 예를 들어 HTTP 구성 요소를 사용하여 엔드포인트 URI에 쿼리 매개변수를 제공합니다.

ignoreDeprecated

true

Camel 2.23 끝점 URI에서 더 이상 사용되지 않는 옵션을 무시할지 여부입니다.

duplicateRouteId

true

Camel 2.20 중복 경로 ID의 유효성을 검증할지 여부입니다. 경로 ID는 고유해야 하며 중복된 경우 Camel이 시작되지 않습니다.

directOrSedaPairCheck

true

Camel 2.23 기존 소비자로 전송되는 직접/스eda 끝점의 유효성을 검증할지 여부입니다.

showAll

false

모든 끝점 및 간단한 표현식을 표시할지 여부(잘못된 및 유효함).

예를 들어 명령줄에서 더 이상 사용되지 않는 옵션 사용을 무시하려면 다음을 실행할 수 있습니다.

$mvn camel:validate -Dcamel.ignoreDeprecated=false

camel. ignoreDeprecated 를 옵션 이름으로 사용하여 -D 명령 인수 앞에 붙여야 합니다.

2.12.2.3. include 테스트를 사용하여 끝점 검증

Maven 프로젝트가 있는 경우 플러그인을 실행하여 단위 테스트 소스 코드에서 끝점을 검증할 수 있습니다. 다음과 같이 -D 스타일을 사용하여 옵션을 전달할 수 있습니다.

$cd myproject
$mvn org.apache.camel:camel-maven-plugin:2.20.0:validate -DincludeTest=true

2.12.3. camel:route-coverage

단위 테스트에서 Camel 경로 적용 범위 보고서를 생성하기 위해 다음을 수행합니다. 이를 사용하여 Camel 경로의 어떤 부분이 사용되었는지 확인할 수 있습니다.

2.12.3.1. 경로 적용 범위 활성화

다음 중 하나를 사용하여 단위 테스트를 실행하는 동안 경로 범위를 활성화할 수 있습니다.

  • 모든 테스트 클래스에 대해 글로벌 JVM 시스템 속성 설정
  • camel-test-spring 모듈을 사용하는 경우 테스트 클래스당 @EnableRouteCoverage 주석 사용
  • camel-test 모듈을 사용하는 경우 테스트 클래스당 isDumpRouteCoverage 메서드 덮어쓰기

2.12.3.2. JVM 시스템 속성을 사용하여 경로 적용 범위 활성화

JVM 시스템 속성 CamelTestRouteCoverage 를 켜면 모든 테스트 케이스에 대한 라우팅 범위를 활성화할 수 있습니다. 이 작업은 maven-surefire-plugin 의 구성에서 수행할 수 있습니다.

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <systemPropertyVariables>
      <CamelTestRouteCoverage>true</CamelTestRouteCoverage>
    </systemPropertyVariables>
  </configuration>
</plugin>

또는 테스트를 실행할 때 명령줄에서 다음을 수행합니다.

mvn clean test -DCamelTestRouteCoverage=true

2.12.3.3. @EnableRouteCoverage 주석을 통해 활성화

camel-test-spring 을 사용하여 테스트하는 경우 테스트 클래스에 @EnableRouteCoverage 주석을 추가하여 단위 테스트 클래스에서 라우팅 범위를 활성화할 수 있습니다.

@RunWith(CamelSpringBootRunner.class)
@SpringBootTest(classes = SampleCamelApplication.class)
@EnableRouteCoverage
public class FooApplicationTest {

2.12.3.4. isDumpRouteCoverage 방법을 통해 활성화

그러나 camel-test 를 사용하고 단위 테스트가 CamelTestSupport 를 확장하는 경우 다음과 같이 경로 범위를 설정할 수 있습니다.

@Override
public boolean isDumpRouteCoverage() {
    return true;
}

RouteCoverage 메서드에서 범위를 지정할 수 있는 경로에는 고유한 ID가 할당되어야 합니다. 즉, 익명 경로를 사용할 수 없습니다. Java DSL에서 routeId 를 사용하여 이 작업을 수행합니다.

from("jms:queue:cheese").routeId("cheesy")
  .to("log:foo")
  ...

그리고 XML DSL에서는 id 속성을 통해 경로 ID를 할당하기만 하면 됩니다.

<route id="cheesy">
  <from uri="jms:queue:cheese"/>
  <to uri="log:foo"/>
  ...
</route>

2.12.3.5. 경로 범위 보고서 생성

TO generate the route coverage report, run the unit test with:

mvn test

그런 다음 다음을 실행하여 경로 범위를 보고할 수 있습니다.

mvn camel:route-coverage

이 보고서는 정확한 소스 코드 라인 보고를 사용하여 경로 범위가 누락된 경로를 보고합니다.

[INFO] --- camel-maven-plugin:2.21.0:route-coverage (default-cli) @ camel-example-spring-boot-xml ---
[INFO] Discovered 1 routes
[INFO] Route coverage summary:

File:	src/main/resources/my-camel.xml
RouteId:	hello

  Line #      Count   Route
  ------      -----   -----
      28          1   from
      29          1     transform
      32          1     filter
      34          0       to
      36          1     to

Coverage: 4 out of 5 (80.0%)

여기에서 의 두 번째 마지막 행에는 count 열에 0 이 있으므로 적용되지 않습니다. 또한 my-camel.xml XML 파일에 있는 소스 코드 파일에서 34행임을 알 수 있습니다.

2.12.3.6. 옵션

Camel Maven 플러그인 적용 범위는 명령줄에서 구성 하거나 <configuration> 태그의 pom.xml 파일에 정의된 다음 옵션을 지원합니다.

매개변수

기본값

설명

failOnError

false

경로 중 하나에 100% 범위가 없는 경우 실패할지 여부입니다.

includeTest

false

테스트 소스 코드를 포함할지 여부입니다.

includes

 

지정된 패턴 목록(wildcard 및 정규식)과 일치하는 파일만 포함하도록 java 및 xml 파일의 이름을 필터링합니다. 여러 값을 쉼표로 구분할 수 있습니다.

excludes

 

지정된 패턴 목록(wildcard 및 정규식)과 일치하는 파일을 제외하도록 java 및 xml 파일의 이름을 필터링하려면 다음을 수행합니다. 여러 값을 쉼표로 구분할 수 있습니다.

anonymousRoutes

false

익명 경로 허용 여부(경로 ID가 할당되지 않은 라우팅). 경로 ID를 사용하면 경로 소스 코드와 라우팅 커버 데이터를 일치시키는 것이 더 안전합니다. 익명 경로는 소스 코드의 경로 중 어떤 경로에 해당하는지 정확히 확인하기가 더 어렵기 때문에 경로 적용 범위에 덜 안전합니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.