18장. Maven으로 빌드
초록
Maven은 Apache Maven 프로젝트에서 사용할 수 있는 오픈 소스 빌드 시스템입니다. 이 장에서는 몇 가지 기본 Maven 개념에 대해 설명하고 Red Hat Fuse에서 작동하도록 Maven을 설정하는 방법을 설명합니다. 기본적으로 모든 빌드 시스템을 사용하여 OSGi 번들을 빌드할 수 있습니다. 그러나 Maven은 Red Hat Fuse에서 효과적으로 지원하는 것이 좋습니다.
18.1. Maven 디렉터리 structure
18.1.1. 개요
Maven 빌드 시스템의 가장 중요한 원칙 중 하나는 Maven 프로젝트의 모든 파일에 대한 표준 위치가 있다는 것입니다. 이 원칙에는 몇 가지 장점이 있습니다. 한 가지 장점은 Maven 프로젝트에는 일반적으로 동일한 디렉터리 레이아웃이 있어 프로젝트에서 파일을 쉽게 찾을 수 있다는 것입니다. 또 다른 장점은 Maven과 통합된 다양한 툴이 초기 구성이 거의 필요하지 않다는 것입니다. 예를 들어 Java 컴파일러는 src/main/java
아래에 있는 모든 소스 파일을 컴파일하고 결과를 대상/클래스
에 배치해야 함을 알고 있습니다.
18.1.2. 표준 디렉터리 레이아웃
예 18.1. “표준 Maven 디렉터리 레이아웃” OSGi 번들 프로젝트 빌드와 관련된 표준 Maven 디렉터리 레이아웃의 요소를 보여줍니다. 또한 블루프린트 구성 파일(MM에 의해 정의되지 않음 )의 표준 위치도 표시됩니다.
예 18.1. 표준 Maven 디렉터리 레이아웃
ProjectDir/
pom.xml
src/
main/
java/
...
resources/
META-INF/
OSGI-INF/
blueprint/
*.xml
test/
java/
resources/
target/
...
표준 디렉터리 레이아웃을 재정의할 수 있지만 Maven에서는 권장되지 않습니다.
18.1.3. pom.xml file
pom.xml
파일은 현재 프로젝트를 빌드하는 방법에 대한 완전한 설명이 포함된 현재 프로젝트의 POM(Project Object Model)입니다. pom.xml
파일은 완전히 자체 포함 될 수 있지만 상위 POM 파일에서 설정을 가져올 수 있습니다.
프로젝트를 빌드한 후 생성된 JAR 파일의 다음 위치에 pom.xml
파일의 사본이 자동으로 포함됩니다.
META-INF/maven/groupId/artifactId/pom.xml
18.1.4. src 및 대상 디렉터리
src/
디렉터리에는 프로젝트를 개발하는 동안 작업할 모든 코드와 리소스 파일이 포함되어 있습니다.
target/
디렉터리에는 빌드 결과(일반적으로 JAR 파일)와 빌드 중에 생성된 모든 중간 파일이 포함됩니다. 예를 들어 빌드를 수행한 후 target/classes/
디렉터리에는 리소스 파일의 복사본과 컴파일된 Java 클래스가 포함됩니다.
18.1.5. 기본 및 테스트 디렉토리
src/main/
디렉터리에는 아티팩트를 빌드하는 데 필요한 모든 코드와 리소스가 포함되어 있습니다.
src/test/
디렉터리에는 컴파일된 아티팩트에 대해 단위 테스트를 실행하기 위한 모든 코드와 리소스가 포함되어 있습니다.
18.1.6. Java 디렉터리
각 java
하위 디렉터리에는 표준 Java 디렉터리 레이아웃이 있는 Java 소스 코드(/
*.java
파일)가 포함되어 있습니다(즉, 디렉터리 경로 이름이 .
문자 대신 Java 패키지 이름을 미러링하는 경우). src/main/java/
디렉터리에는 번들 소스 코드가 포함되어 있고 src/test/java/
디렉터리에는 단위 테스트 소스 코드가 포함되어 있습니다.
18.1.7. 리소스 디렉터리
번들에 포함할 구성 파일, 데이터 파일 또는 Java 속성이 있는 경우 src/main/resources/
디렉터리에 배치해야 합니다. src/main/resources/
아래의 파일 및 디렉터리는 Maven 빌드 프로세스에서 생성되는 JAR 파일의 루트로 복사됩니다.
src/test/resources/
아래의 파일은 테스트 단계에서만 사용되며 생성된 JAR 파일에 복사 되지 않습니다.
18.1.8. 블루프린트 컨테이너
OSGi R4.2는 블루프린트 컨테이너를 정의합니다. Red Hat Fuse는 블루프린트 컨테이너를 기본적으로 지원하므로 블루프린트 구성 파일인 OSGI-INF/blueprint/*.xml
을 프로젝트에 포함할 수 있습니다. 블루프린트 컨테이너에 대한 자세한 내용은 12장. OSGi 서비스 에서 참조하십시오.