【问题标题】:Maven multi-module project duplicates ear output, one without resource filteringmaven多模块项目重复ear输出,一个没有资源过滤
【发布时间】:2012-06-02 05:28:39
【问题描述】:

假设我有一个 Maven 多模块 Java EE 6 应用:

foobar/
    foobar-ear/
        src/
            main/
                application/
                    META-INF/
                        MANIFEST.MF
                        glassfish-application.xml
                        glassfish-resources.xml
                filters/
                    dev.properties
                    prod.properties
                    test.properties
        pom.xml
    foobar-web/
    foobar-ejb/
    pom.xml

如您所见,我正在使用资源过滤。 foob​​ar-ear 中的 pom 定义了构建配置文件:

<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <env>dev</env>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>test</id>
        <properties>
            <env>test</env>
        </properties>
    </profile>
    <profile>
        <id>demo</id>
        <properties>
            <env>demo</env>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <env>prod</env>
        </properties>
    </profile>
</profiles>

并且每个子项目的 pom 都定义了资源过滤。在 foobar-ear/pom.xml 中:

<build>
    ...

    <filters>
        <filter>src/main/filters/${env}.properties</filter>
    </filters>
    <resources>
        <resource>
            <directory>src/main/application</directory>
            <filtering>true</filtering>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/application</directory>
            <filtering>false</filtering>
            <excludes>
                <exclude>**/*.xml</exclude>
            </excludes>
        </resource>
    </resources>

    ...
</build>

这里的目的是过滤 foobar-ear/src/main/application/META-INF/glassfish-resources.xml,其中包含过滤器属性文件中定义的 JDBC 和 JavaMail 配置项的占位符。

当我使用mvn -Pdev clean install 构建时,我会在 foobar-ear 中得到这个输出:

foobar-ear/
    target/
        classes/
            META-INF/
                MANIFEST.MF
                glassfish-application.xml
                glassfish-resources.xml    <- This one is filtered
        foobar-ear/
            META-INF/
                MANIFEST.MF
                glassfish-application.xml
                glassfish-resources.xml    <- This one is NOT filtered
            lib/
            foobar-ejb.jar
            foobar-web.war
        application.xml
        foobar-ear.ear                     <- ear file. Contents same as foobar-ear/

如您所见,复制到通常输出位置的资源被过滤,但EAR目录布局和ear文件中的资源没有。

【问题讨论】:

    标签: java maven ear maven-ear-plugin


    【解决方案1】:

    我将&lt;filtering&gt;true&lt;/filtering&gt; 添加到maven-ear-plugin 配置中,现在它可以工作了。

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-ear-plugin</artifactId>
                <version>2.7</version>
                <configuration>
                    <filtering>true</filtering>
                    [...]
                </configuration>
            </plugin>
            [...]
        </plugins>
        [...]
    </build>
    

    参考:Filtering the sources

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      • 2013-07-03
      • 2013-11-03
      • 2013-11-22
      • 1970-01-01
      • 2011-04-16
      • 2018-07-24
      相关资源
      最近更新 更多