【问题标题】:How to copy resource to src target directory with Maven?如何使用 Maven 将资源复制到 src 目标目录?
【发布时间】:2014-06-10 22:20:08
【问题描述】:

我目前正在处理一个现有项目,该项目有一个 pom.xml 文件,其中包含以下内容:

<resources>
    <resource>
        <filtering>false</filtering>
        <directory>src</directory>
        <includes>
            <include>**/*.properties</include>
        </includes>
    </resource>
</resources>

我在基本路径中有一个名为 properties 的目录,其中包含属性文件。我想在打包我的src目录下properties/下的所有属性文件时复制(否则程序会因为缺少配置文件而崩溃)。

所以我的问题是:

如何使用 Maven 包含不在 src 目录下的资源文件?

我尝试了这个,但它似乎不起作用:

<resources>
    <resource>
        <filtering>false</filtering>
        <directory>src</directory>
        <includes>
            <include>**/*.properties</include>
            <include>../properties/**</include>
        </includes>
    </resource>
</resources>

感谢您的帮助。

【问题讨论】:

    标签: java maven resources copy


    【解决方案1】:

    如果你的文件结构是这样的: Standard Directory Layout

    那么您不必添加资源元素。 Maven默认将 /src/main/resources 文件夹中的所有文件和文件夹复制到构建文件夹中,并将它们定位在已编译类路径文件的根目录中。
    例如,如果您有一个名为 configuration.properties 的文件位于 /src/main/resources/configuration.properties 中,那么在运行 mvn clean compile 时,该文件将被复制到您的 /target/classes/configuration.properties 因此,如果您删除该部分,文件将位于您想要的位置

    <resource>
        <filtering>false</filtering>
        <directory>src</directory>
        <includes>
            <include>**/*.properties</include>
        </includes>
    </resource>
    

    【讨论】:

    • 感谢您这么快的回答,问题是项目太旧了(在 maven 之前),所以它不遵循 maven 标准目录布局。您的回答非常有用,我只需将我的属性目录添加为资源目录。
    • 没有。最好是更改文件夹结构并遵循让您的生活更轻松的约定。
    • 很高兴我能帮上忙。作为 khmarbaise,它使您的生活更容易遵循标准对流。让您和使用该项目的其他所有人的生活更轻松 :)
    • 我是开发团队的新手,所以改变项目结构的决定不取决于我。我想改变项目结构(它会避免像这样的棘手问题),但我不能。谢谢你的帮助,你节省了我很多时间;-)。
    • 当答案基本上说服 OP 改变他的方式,然后被接受时,我讨厌这个。信不信由你,我来这里是为了寻找一种方法来做 OP 最初打算做的事情。这个接受的答案回答实际问题。
    【解决方案2】:

    通过在不更改项目结构的情况下将项目从 ant 迁移到 maven,在构建中设置您的 sourceDirectory testSourceDirectory 并使用 maven-resource-plugin,因为在执行目标的阶段要小心。

            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <id>copy-resources01</id>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${basedir}/target/classes</outputDirectory>
                            <encoding>UTF-8</encoding>
                            <resources>
                                <resource>
                                    <directory>${basedir}/src</directory>
                                    <includes>
                                        <include>**/*.properties</include>
                                    </includes>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                    <execution>
                        <id>copy-resources02</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${basedir}/build/lib</outputDirectory>
                            <encoding>UTF-8</encoding>
                            <resources>
                                <resource>
                                    <directory>${basedir}/target/</directory>
                                    <include>*.jar</include>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
    

    【讨论】:

    • 感谢回复,如果 zpontikas 没有给我解决方案,我会尝试一下。
    • 所以这里发生了什么: 1. 使用 id 执行复制 resources01 复制在 ${basedir}/src 中找到的所有 *.property 文件复制在 ${basedir}/target/classes 目录中它们与 src 中的包相同。 2. 使用 id 复制 resources02 执行会将结果 *.jar 文件放在 ${basedir}/build/lib 中,这是 ant 项目已经将结果放在前面的地方。我知道有点困难,最后你需要通过 mvn clean the build/lib 删除。命令: mvn install 你应该使用
    【解决方案3】:

    为了将所有内容从源复制到目标,我使用了以下方法

            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${basedir}/target/classes/static/</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>${basedir}/gui/build/</directory>
                                    <includes>
                                        <include>**/*.*</include>
                                    </includes>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-24
      • 2019-06-20
      • 1970-01-01
      • 2017-09-25
      • 2022-12-22
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      相关资源
      最近更新 更多