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
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. OSGi 블루프린트 실행 링크 복사링크가 클립보드에 복사되었습니다!
camel:run
플러그인은 블루프린트 애플리케이션 실행을 지원하며 기본적으로 OSGI-INF/blueprint/*.xml
에서 OSGi 블루프린트 파일을 스캔합니다. 아래 표시된 대로 blueprint를 true로 사용하여 블루프린트를 사용하도록 camel:run 플러그인을 구성해야 합니다.
이를 통해 Camel과 관련이 있는지 여부에 관계없이 원하는 블루프린트 서비스를 부팅할 수 있습니다. camel:run
목표는 카l-blueprint가 classpath에 있는지 또는 프로젝트에 블루프린트 XML 파일이 있는지 자동 감지할 수 있으므로 더 이상 useBlueprint
옵션을 구성할 필요가 없습니다.
2.12.1.3. 제한된 블루프린트 컨테이너 사용 링크 복사링크가 클립보드에 복사되었습니다!
Felix Connector 프로젝트를 블루프린트 컨테이너로 사용합니다. 이 프로젝트는 완전한 가상 블루프린트 컨테이너가 아닙니다. 이를 위해 Apache Karaf 또는 Apache ServiceMix를 사용할 수 있습니다. applicationContextUri
구성을 사용하여 다음과 같은 명시적 블루프린트 XML 파일을 지정할 수 있습니다.
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
cd examples/camel-example-cdi
mvn compile camel:run
2.12.1.5. classpath 로깅 링크 복사링크가 클립보드에 복사되었습니다!
camel:run
을 실행할 때 classpath를 로깅해야 하는지 여부를 구성할 수 있습니다. 다음을 사용하여 구성에서 이 기능을 활성화할 수 있습니다.
2.12.1.6. XML 파일의 실시간 다시 로드 사용 링크 복사링크가 클립보드에 복사되었습니다!
XML 파일 변경 사항을 스캔하고 해당 XML 파일에 포함된 Camel 경로를 다시 로드하도록 플러그인을 구성할 수 있습니다.
그런 다음 플러그인은 이 디렉터리를 조사합니다. 이를 통해 편집기에서 소스 코드를 편집하고 파일을 저장하고 실행 중인 Camel 애플리케이션에서 해당 변경 사항을 활용할 수 있습니다. 지원되는 Camel 경로 변경(예: <routes> 또는 < route
>)만 변경합니다. Spring 또는 OSGi 블루프린트 <
bean> 요소는 변경할
수 없습니다.
2.12.2. Camel:validate 링크 복사링크가 클립보드에 복사되었습니다!
다음 Camel 기능에 대한 소스 코드 검증의 경우:
- 엔드포인트 URI
- 간단한 표현식 또는 서술자
- 중복 경로 ID
그런 다음 명령줄에서 camel:validate
목표를 실행하거나 IDEA 또는 Eclipse와 같은 Java 편집기에서 실행할 수 있습니다.
mvn camel:validate
mvn camel:validate
이러한 오류를 파악하기 위해 플러그인을 빌드의 일부로 자동 실행하도록 활성화할 수도 있습니다.
단계는 플러그인이 실행되는 시기를 결정합니다. 위의 샘플에서 단계는 기본 소스 코드를 컴파일한 후 실행되는 프로세스 클래스입니다
. maven 플러그인은 테스트 소스 코드의 유효성을 검사하도록 구성할 수도 있습니다. 즉, 다음과 같이 process-test-classes
에 따라 단계를 변경해야 합니다.
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
$cd camel-example-cdi
$mvn org.apache.camel:camel-maven-plugin:2.20.0:validate
그러면 다음을 실행하고 출력합니다.
검증이 통과되고 4개의 끝점이 검증되었습니다. 이제 다음과 같은 소스 코드에서 Camel 엔드포인트 URI 중 하나에 오타를 발생했다고 가정합니다.
@Uri("timer:foo?period=5000")
@Uri("timer:foo?period=5000")
기간
옵션에 오타 오류를 포함하도록 변경됨
@Uri("timer:foo?perid=5000")
@Uri("timer:foo?perid=5000")
검증 목표를 다시 실행하면 다음이 보고됩니다.
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
$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
$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
의 구성에서 수행할 수 있습니다.
또는 테스트를 실행할 때 명령줄에서 다음을 수행합니다.
mvn clean test -DCamelTestRouteCoverage=true
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 {
@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; }
@Override
public boolean isDumpRouteCoverage() {
return true;
}
RouteCoverage 메서드에서 범위를 지정할 수 있는 경로에는 고유한 ID가 할당되어야 합니다. 즉, 익명 경로를 사용할 수 없습니다. Java DSL에서 routeId
를 사용하여 이 작업을 수행합니다.
from("jms:queue:cheese").routeId("cheesy") .to("log:foo") ...
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>
<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 test
그런 다음 다음을 실행하여 경로 범위를 보고할 수 있습니다.
mvn camel:route-coverage
mvn camel:route-coverage
이 보고서는 정확한 소스 코드 라인 보고를 사용하여 경로 범위가 누락된 경로를 보고합니다.
여기에서 의 두 번째 마지막 행에는 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를 사용하면 경로 소스 코드와 라우팅 커버 데이터를 일치시키는 것이 더 안전합니다. 익명 경로는 소스 코드의 경로 중 어떤 경로에 해당하는지 정확히 확인하기가 더 어렵기 때문에 경로 적용 범위에 덜 안전합니다. |