【发布时间】:2014-06-24 07:21:23
【问题描述】:
目前我有一个示例 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 配置 sn-p 时,其值为 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。
【问题讨论】:
-
你想完成什么? 默认情况下包含 src/main/resources。
-
@bmargulies 感谢您的关注。是的,我知道这两个,但实际上我在拥有另一个自定义资源文件目录/路径时正在考虑这一点。
-
你把它放在顶级
元素中,而不是在插件配置中。 -
标签
<classesDirectory>应该包含.class文件,因此它应该指向target/classes(这是默认值)而不是src/main/java。如果要捆绑源文件,请查看source plugin -
是的,
class始终是编译文件(即 .class 文件)的提示,另一方面,source是.java文件
标签: java maven jar maven-resources-plugin maven-jar-plugin