특정 속성을 정의하는 모듈에 대한 공통 빌드 프로필을 갖고 싶습니다. 제 경우에는 jar-with-dependencies
플러그인을 실행 중이며 모듈이 main.class
속성을 정의 할 때만 실행되기를 바랍니다 .
부모 POM에 다음이 있습니다.
<profiles>
<profile>
<id>executable-jar</id>
<activation>
<property>
<name>main.class</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>${main.class}</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
-Dmain.class
Maven 명령을 실행할 때 정의하지 않으면 빌드되지 않으므로 계산되는 모듈에서 속성을 감지하지 못하는 것처럼 보입니다. 이것이 트리거 될 수 있습니까?
당신은 잘못된 방향으로 가고 있습니다. 프로파일은 이러한 방식으로 사용되지 않습니다 . 으로 활성화 된 프로필 <property>
은 Maven 속성뿐만 아니라 시스템 속성 의 존재 (또는 부재)만을 대상으로 하기 때문에 구성이 작동하지 않습니다 . 이는 활성 프로필을 빌드 시작부터 바로 계산해야하는 반면 Maven 속성은 그 후에 설정해야하기 때문입니다 (빌드 중에 속성을 설정할 수도 있음).
여기서 정말로 원하는 maven-assembly-plugin
것은 상위 POM 의 구성을 고려하는 것 입니다. 이를위한 Maven 방법은 다음과 같이 선언하는 것입니다 <pluginManagement>
.
플러그인 관리에는이 특정 프로젝트 빌드에 대한 플러그인 정보를 구성하는 대신이 빌드에서 상속하는 프로젝트 빌드를 구성한다는 점을 제외하고는 거의 동일한 방식으로 플러그인 요소가 포함됩니다. 그러나 이것은 자식의 plugins 요소 내에서 실제로 참조되는 플러그인 만 구성합니다.
즉,에 대한 플러그인 관리를 구성 maven-assembly-plugin
하고 해당 플러그인을 호출 할 프로젝트가이를 참조하도록 할 수 있습니다.
따라서 부모 POM에는 다음이 포함됩니다.
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>${main.class}</mainClass>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
이것은에 대한 관리 섹션을 선언합니다 maven-assembly-plugin
. 이를 모듈에서 사용하려면 하위 POM에 다음이 필요합니다.
<properties>
<main.class>MyMainClass</main.class>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
</plugin>
</plugins>
</build>
이는 모듈이 상위 POM의 관리 섹션을 참조 함을 선언합니다. 그리고 Maven main.class
은이 경우 빌드 속성 을 올바르게 사용합니다 .
이 플러그인이 호출되지 않는 모듈의 경우의 플러그인 선언을 생략하면 maven-assembly-plugin
아무 일도 일어나지 않습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다