maven多配置文件层次依赖问题

时间:2013-12-16 18:11:37

标签: java eclipse maven development-environment production-environment

我有一个项目结构,如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。

提前致谢。

0 个答案:

没有答案