3

目前我有一个示例 Maven 项目,其中包含以下build部分,我指定了第二个资源位置目录:

<project>
...
<build>
    <resources>
        <resource>
            <directory>src/main/second-resources</directory>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>${maven.compiler.source}</source>
                <target>${maven.compiler.target}</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <finalName>${artifactId}</finalName>
                <outputDirectory>${jarBuildPath}</outputDirectory>
            </configuration>
        </plugin>
    </plugins>
</build>
</project>

我可以使用此配置将我的 jar 打包,将我的类和资源文件放在正确的位置并且没有问题。

但是当将该属性添加<classesDirectory>到我的maven-jar-plugin配置片段时,其值为src/main/java

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>2.4</version>
    <configuration>
      <classesDirectory>src/main/java</classesDirectory>
      <finalName>${artifactId}</finalName>
      <outputDirectory>${jarBuildPath}</outputDirectory>
    </configuration>
 </plugin>

然后在打包我的档案时,地狱,我的资源文件不再存在

classesDirectory 属性的 maven 官方文档中,它说Directory 包含应该打包到 JAR 中的类和资源文件。这对我来说很有意义,我的资源文件消失是很公平的,因为 maven 假定没有文件有权被打包,除非它位于src/main/java下。

但我最大的想法是在指定我的资源文件位置(使用以下选项之一)时,即使我指定了<classesDirectory>条目,Maven 也会知道文件位置。

有顶级<resources>入口

<resources>
  <resource>
  <directory>src/main/second-resources</directory>
  </resource>
</resources>

或通过maven-resource-plugin

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-resources-plugin</artifactId>
  <version>2.6</version>
    <configuration>
      <resources>
        <resource>
          <directory>src/main/second-resources</directory>
        </resource>
      </resources>
    </configuration>
  </plugin>

我可以告诉你,我对 maven 很熟悉,但这个问题对我来说似乎很奇怪:当你有一些自定义资源目录时,不建议在 maven-jar-plugin 中使用吗?

任何人都可以对此有所了解吗?

BR。

4

1 回答 1

3

classesDirectory目录

  • 编译器插件存储已编译的 java 类
  • resources-plugin 复制要包含在 jar-plugin 创建的文件中的资源。

您已将其更改为 jar-plugin 配置中的 java 源代码目录。

因此,我想你的 jar 现在只包含 java 源文件。

这是您想要的,还是您只是想包含第二个资源文件来源?

如果是后者,那么只需添加:

<resources>
  <resource>
      <directory>src/main/resources</directory>
  </resource>
  <resource>
      <directory>src/main/second-resources</directory>
  </resource>
</resources>

应该在不向 jar 插件添加任何配置的情况下完成你想要的。请注意,如果您在默认的 src/main/resources 位置仍有所需的内容,则需要第一个 <resource>..</resource> 部分。

于 2014-05-07T11:24:52.670 回答