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를 사용하면 경로 소스 코드와 라우팅 커버 데이터를 일치시키는 것이 더 안전합니다. 익명 경로는 소스 코드의 경로 중 어떤 경로에 해당하는지 정확히 확인하기가 더 어렵기 때문에 경로 적용 범위에 덜 안전합니다. |