【问题标题】:How can I get the resource directory in maven to work?如何让 maven 中的资源目录工作?
【发布时间】:2018-03-17 07:48:28
【问题描述】:

我有一个要清理的 Java Maven Web 应用程序项目。在我的pom.xml<build> 部分,我有以下内容:

<build>
    <resources>
        <resource>
            <filtering>true</filtering>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
    <filters>
        <filter>profiles/${build.profile.id}.profile.properties</filter>
    </filters>
    [...other properties...]
</build>

在我的项目中,我的 Mac 上是/Users/anthony/workspace/my-project/,我有src/main/resources/profiles/我有local.profile.propertiesqa.profile.properties

然后,在我的 pom 中的 maven 配置文件中,我将 ${build.profile.id} 定义如下:

<profile>
    <id>local</id>
    [...stuff...]
    <properties>
        <build.profile.id>local</build.profile.id> <!-- or qa -->
        [...stuff...]
    </properties>
</properties>

当我在控制台中运行 $ mvn clean install -Plocal 时,我收到以下错误:

Failed to execute goal ... on project my-project: Error loading property file '/Users/anthony/workspace/my-project/profiles/local.profile.properties'.

Maven 似乎无法识别我的过滤配置文件属性文件的资源目录。这仅在我明确放置属性文件的整个路径时才有效,如下所示:

<filters>
        <filter>src/main/resources/profiles/${build.profile.id}.profile.properties</filter>
</filters>

有没有办法让我不必明确声明src/main/resources?我认为我声明资源目录的目的是我可以使用它,尤其是声明过滤。

【问题讨论】:

    标签: java maven filter properties profile


    【解决方案1】:

    资源目录仅对正在构建的 Java 工件具有“资源”的意义,但对 Maven 本身没有意义。对于 Maven,“resources”目录具有特殊含义,因为 Maven 知道将这些文件复制到生成的 jar 文件中的何处。但是对于 Maven 处理文件或过滤文件,您必须告诉 Maven 确切的路径,因为 Maven 不知道过滤后的文件是资源、源文件还是其他文件。此外,您可以定义多个源或资源目录,而 Maven 不知道要过滤哪一个。因此,您始终需要指定 Maven 的完整路径。

    所以,简而言之:

    有没有办法让我不必明确声明 src/main/resources?

    没有。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-28
      • 2011-09-10
      • 2014-09-13
      • 2015-12-08
      • 2014-02-07
      • 2015-03-13
      • 2014-06-10
      相关资源
      最近更新 更多