使用Maven打包资源文件和类的最佳实践

时间:2014-05-07 10:48:10

标签: java maven jar maven-resources-plugin maven-jar-plugin

目前我有一个示例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>

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

来自maven official documentation for the classesDirectory property,它说 目录包含应该打包到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。

1 个答案:

答案 0 :(得分:1)

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插件中添加任何配置。请注意第一个&lt; resource&gt; ..&lt; / resource&gt;如果您仍然在默认的src / main / resources位置拥有所需的内容,则需要部分。