当前位置: 首页 > 知识库问答 >
问题:

Maven多模块项目复制ear输出,其中一个没有资源过滤

文心思
2023-03-14

假设我有一个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

正如您所看到的,我正在使用资源过滤。fobar-ears中的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定义了资源过滤。在fobar-ears/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资源。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目录布局和耳文件中的资源不会。

共有1个答案

简宏义
2023-03-14

我添加了

<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>

参考:过滤源

 类似资料:
  • 问题内容: 有什么方法可以在Maven中的父项目的模块之间共享资源?例如,我想为一个多模块Maven项目中的所有模块指定一个log4j.properties文件。 通常,我使用Eclipse IDE通过选择常规项目来创建父项目,然后通过指定的包装将其转换为Maven项目。这将创建一个没有and等文件夹的“干净”项目结构。我不知道在这种情况下应该在哪里放置这样的共享资源。 EDIT1 :我想将公共资

  • [ERROR]无法执行goal org.springframework.boot:spring-boot-maven-plugin:2.1.1。release:repackage(repackage)on project project-data:goal org.springframework.boot:spring-boot-maven-plugin:2.1.1。release:repacka

  • 我有一个spring boot mavel多模块项目。 如果Spring启动模块依赖于模块,并且在模块的文件夹中有一个属性文件或其他一些资源,我希望捆绑在最终的Spring启动应用程序中,我如何实现这一点。 目前,如果我在模块A JAR上运行,它包括文件: 然而: 提前感谢您的任何建议。

  • 我曾广泛使用过Maven 目前有5个不同的maven项目,每个项目都有一个不同的pom.xml。到目前为止,它们之间存在依赖关系,如果需要,每一个都指向 中的另一个。 现在我们不喜欢的是 当我们发布子projectA时,我们需要手动修改所有将projectA作为依赖项的项目以使用新版本。Saw Maven有一个版本插件,不知道这会有什么帮助。 作为解决方案,我希望在POM之间有一个更干净的组织,并

  • 我使用的是Maven 3.0.3、JUnit 4.8.1和Java1.6。我在JUnit测试文件中有这个... 未拾取“test.properties”(输入流对象为空)。我的项目结构如下: parent+---pom.xml +----war模块 +------pom.xml +------src/test/java/junit文件 +------src/test/resources/test.

  • 我有一个maven多模块项目。其中一个模块(编译为.jar)只包含域对象,这些对象将在客户端和服务器端使用(我将这个.jar添加为我的其他模块的依赖项)。 我知道GWT模块,其中将使用来自共享<代码>的对象。jar还必须有源文件才能成功编译。所以我尝试添加到我的pom中。xml两者: 和 但结果是<代码>。jar不包含GWT模块源代码(即GWT.xml)。也会添加域类的所有源(位于