我有多層次的 pom maven 專案。
Parent POM:這包含兩個具有不同依賴項和屬性值(env-type)的組態檔,用于分類器。deploy_mav/pom_multi_cloud.xml ::
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.abc</groupId>
<artifactId>master-pom-multi-cloud</artifactId>
<version>ver-1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Master POM Multi Cloud</name>
<modules>
<module>pom_multi_cloud_webapp_servlet3.xml</module>
</modules>
<build>
<finalName>${project.artifactId}-${project.version}</finalName>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>default-jar</id>
<configuration>
<classifier>${env-type}</classifier>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.4</version>
<configuration>
<classifier>${env-type}</classifier>
</configuration>
<executions>
<execution>
<id>default-install</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<configuration>
<classifier>${env-type}</classifier>
</configuration>
<executions>
<execution>
<id>default-jar</id>
<configuration>
<classifier>${env-type}</classifier>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<profiles>
<profile>
<id>build_aws</id>
<properties>
<env-type>aws</env-type>
</properties>
<dependencies>
<dependency>
<groupId> com.abc.org</groupId>
<artifactId>aws-common</artifactId>
<version>${env-type-common-version}</version>
</dependency>
</dependencies>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
</profile>
<profile>
<id>build_gcp</id>
<properties>
<env-type>gcp</env-type>
</properties>
<dependencies>
<dependency>
<groupId> com.abc.org</groupId>
<artifactId>gcp-common</artifactId>
<version>${env-type-common-version}</version>
</dependency>
</dependencies>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
</profile>
</profiles>
</project>
在第一級子 pom.xml 中,
<project>
<groupId>com.abc.org.plat</groupId>
<artifactId>apps-service-ser</artifactId>
<version>ver-1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<parent>
<groupId>com.abc.org</groupId>
<artifactId>master-pom-multi-cloud</artifactId>
<version>ver-1.0.0-SNAPSHOT</version>
<relativePath>../deploy_mav/pom_multi_cloud.xml</relativePath>
</parent>
<modules>
<module>app-ui-service-ingest</module>
<module>shared-service-api</module>
<module>shared-service-engine</module>
<module>shared-service-plan</module>
<module>shared-service-specs</module>
</modules>
</project>
在第 2 級子模塊 shared-service-engine 中,
<project>
<modelVersion>4.0.0</modelVersion>
<groupId> com.abc.org</groupId>
<artifactId>service-engine</artifactId>
<version>ver-1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Service Engine</name>
<parent>
<groupId>com.abc.org.plat</groupId>
<artifactId>apps-service-ser</artifactId>
<version>ver-1.0.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
...
<dependency>
<groupId> com.abc.org</groupId>
<artifactId>service-plan</artifactId>
<classifier>${env-type}</classifier>
<version>ver-1.0.0-SNAPSHOT</version>
</dependency>
...
</project>
在第三級服務計劃中,
<project>
<modelVersion>4.0.0</modelVersion>
<groupId> com.abc.org</groupId>
<artifactId>service-plan</artifactId>
<version>ver-1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Service Plan</name>
<parent>
<groupId>com.abc.org.plat</groupId>
<artifactId>apps-service-ser</artifactId>
<version>ver-1.0.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<dependency>
<groupId> com.abc.org</groupId>
<artifactId>service-api</artifactId>
<classifier>${env-type}</classifier>
<version>ver-1.0.0-SNAPSHOT</version>
</dependency>
</project>
問題是 env-type ise 收到的價值直到第 2 級。第 2 級具有對第 3 級的依賴呼叫,第 2 級必須將活動組態檔設定的分類器值傳遞給該呼叫。該值未傳遞到第 3 級,而是依賴項搜索 -${env-type}.jar
在除錯時,獲取類似的日志
[DEBUG] com.abc.org:service-plan:jar:gcp:ver-1.0.0-SNAPSHOT:compile
[DEBUG] org.jooq:jooq:jar:3.11.9:compile (version managed from 3.11.9)
[DEBUG] javax.xml.bind:jaxb-api:jar:2.2.12:compile
[DEBUG] com.abc.org:service-api:jar:${env-type}:ver-1.0.0-SNAPSHOT:compile
[ERROR] Failed to execute goal on project service-engine: Could not resolve dependencies for project com.abc.org:service-engine:jar:ver-1.0.0-SNAPSHOT: Could not find artifact com.abc.org:dashboard
-query-api:jar:${env-type}:ver-1.0.0-SNAPSHOT in nexus (https://repo.abc.xyz/nexus/content/groups/public) -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal on project service-engine: Could not resolve dependencies for project com.abc.org:service-engine:jar:ver-1.0.0-SNAPSHOT: Coul
d not find artifact com.abc.org:service-api:jar:${env-type}:ver-1.0.0-SNAPSHOT in nexus (https://repo.abc.xyz/nexus/content/groups/public)
Caused by: org.apache.maven.project.DependencyResolutionException: Could not resolve dependencies for project com.abc.org:service-engine:jar:ver-1.0.0-SNAPSHOT: Could not find artifact com.abc.org:dashboar
d-query-api:jar:${env-type}:ver-1.0.0-SNAPSHOT in nexus (https://repo.abc.xyz/nexus/content/groups/public)
uj5u.com熱心網友回復:
通過在子專案 pom.xml 中創建組態檔并使用命令列引數值激活它來解決它。
mvn -DskipTests -X -P build_aws -Denv-type=aws 全新安裝
<profiles>
<profile>
<id>build_local_aws</id>
<properties>
<test-cloud-type>aws</test-cloud-type>
<cache-version>trunk-2.0.0-SNAPSHOT</cache-version>
</properties>
<activation>
<property>
<name>env-type</name>
<value>aws</value>
</property>
</activation>
</profile>
<profile>
<id>build_local_gcp</id>
<properties>
<test-cloud-type>gcp</test-cloud-type>
<cache-version>trunk-2.0.0-SNAPSHOT</cache-version>
</properties>
<activation>
<property>
<name>env-type</name>
<value>gcp</value>
</property>
</activation>
</profile>
</profiles>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/504090.html
