使用配置文件中的maven复制和覆盖某些资源

时间:2018-05-14 06:49:57

标签: java maven build resources copy

我有两个项目是从一个maven多项目,项目A和项目B构建的。项目B最近生效,与项目A的区别很小,即它使用了几个不同的配置文件。我的想法是为projectB创建一个配置文件并添加其他配置文件/替换现有配置文件。我已经在stackoverflow上尝试了几种方法,包括copy-rename插件和mvn依赖插件。部分问题似乎是两个项目都有一个具有相同配置名称的文件。

我当前/最后的方法是以下列方式使用maven-resources-plugin: 我创建了一个额外的目录:src / main / projectbresources和projectbprofile:

        <profile>
        <id>projectb</id>
        <activation><activeByDefault>false</activeByDefault></activation>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                    <executions>
                        <execution>
                            <id>copy-resources</id>
                            <!-- here the phase you need -->
                            <phase>validate</phase>
                            <goals>
                                <goal>copy-resources</goal>
                            </goals>
                            <configuration>
                                <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
                                <resources>
                                    <resource>
                                        <directory>src/main/projectbresources</directory>
                                        <filtering>true</filtering>
                                    </resource>
                                </resources>
                                <overwrite>true</overwrite>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
            </build>
    </profile>

我在src / main / resources和src / main / projectbresources中都有一个同名文件但是,无论我构建的配置文件是什么,src / main / resources中的文件总是在目标文件夹中。仅在projectbresources中的其他文件将复制到目标。

1 个答案:

答案 0 :(得分:0)

根据您的陈述&#34; 项目B最近才开始生效,与项目A的区别很小,即它使用了几个不同的配置文件。&#34;我会说你不需要2个独立的项目。您只能有一个项目,并根据激活的配置文件选择不同的配置。使用此方法,两种情况的配置文件可以具有相同的名称但内容不同。

您的项目结构看起来像(例如):

项目根文件夹:

pom.xml
- src
-- main
--- resources-profileA
--- resources-profileB

现在,pom.xml包含2个配置文件:profileA和profileB。每个配置文件都定义了它自己的构建/资源。

<profiles>
    <profile>
        <id>projectA</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <build>
            <resources>
                <resource>
                    <directory>src/main/resources-profileA</directory>
                </resource>
            </resources>
        </build>
    </profile>
    <profile>
        <id>projectB</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <build>
            <resources>
                <resource>
                    <directory>src/main/resources-profileB</directory>
                </resource>
            </resources>
        </build>
    </profile>
</profiles>

更多相关信息,您可以默认激活一个配置文件。这将有助于您的开发环境自动使用一个。如果您希望拥有该配置文件的默认活动配置文件,则可以将资源文件夹命名为 resources (默认maven名称),并为第二个配置文件保留不同的名称。

更新:

轻松“轻松”#39;并且只添加一些额外的文件,您可以使用配置文件projectA maven默认并定义onle项目B的配置文件。

项目根文件夹变为:

pom.xml
- src
-- main
--- resources
--- resources-profileB

并且pom.xml默认只包含一个不活动的配置文件:

<profiles>
    <profile>
        <id>projectB</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <build>
            <resources>
                <resource>
                    <directory>src/main/resources-profileB</directory>
                </resource>
            </resources>
        </build>
    </profile>
</profiles>

如何构建两个配置文件:
没有配置文件的构建相当于为projectA构建:

  

mvn clean install

projectB配置文件的Buid将忽略默认文件夹中的资源,并且仅使用在配置文件中定义的资源(src / main / resources-profileB)。

  

mvn clean install -P projectB