我有一个项目结构,如A.war使用B.jar,B.jar使用C.jar和D.jar,C.jar使用E.jar。所有这些战争/ jar生命周期都由maven管理。像所有人一样,我需要将执行环境与“生产”和“开发”分开(从不同的.properties文件中读取)我使用属性并调用environment
并为每个配置文件设置不同的值。它也代表每个war / jar的classifier
属性。所有这些项目都已成功编译并导出到适当的* dev.jar或* -prod.jar中。项目B的示例配置如:
<build>
.....
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>jar</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>${environment}</classifier>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<filters>
<filter>src/main/resources/b-${environment}.properties</filter>
</filters>
</build>
<profiles>
<profile>
<id>prod</id>
<properties>
<environment>prod</environment>
</properties>
</profile>
<profile>
<id>dev</id>
<activation>
<property>
<name>!environment</name>
</property>
</activation>
<properties>
<environment>dev</environment>
</properties>
</profile>
</profiles>
<dependencies>
<!-- C.jar dependency -->
<dependency>
<groupId>com.baz.bar</groupId>
<artifactId>c</artifactId>
<version>1.0</version>
<classifier>${environment}</classifier>
</dependency>
...
</dependencies
因此,我想使用例如A-prod.war中的B-prod.jar,B.prod.jar中的C-prod.jar,依此类推。到目前为止,它似乎很好。根jar(B.jar)可以成功地使用C.jar和D.jar以及相同的环境(dev或prod)。
问题:
当我尝试将B.jar用作A.war中的依赖时,我再次依赖A-dev.war中的B-dev.jar和A-prod.war中的B-prod.jar。但是,由于dev
配置文件是默认配置文件(对于所有项目),我无法像A-prod.war那样创建C-prod.jar之类的依赖项,我总是在A-prod中获得C-dev.jar。战争。我认为可能的问题是当我执行maven-war-plugin时,它会为B.jar检查相同的environment
值,但它使用默认的environment
值(dev
)其余的链依赖。
有什么建议吗?
P.S。 war和jar之间没有module
关系,并且它们不使用共同的父pom。
提前致谢。