【发布时间】:2015-05-23 11:05:28
【问题描述】:
我有一个Maven project,它是从生成的源代码构建的。我用的是maven-source-plugin,配置如下:
<profiles>
<profile>
<id>release</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
...
我使用mvn clean install -P release 构建。这会生成一个包含所有源文件的${artifactId}-${version}-sources.jar 文件,但显然它的打包不正确,因为 IDE 无法识别源可用。其他一切都可以正常构建和工作,包括 Javadocs。
库的主要入口点是net.mintern.primitive.Primitive。项目构建时,Java 文件在target/generated-sources/net/mintern/primitive/Primitive.java 生成。然而,在sources.jar 中,Primitive.java(以及primitive 目录中的所有其他内容)位于 JAR 的根目录中。 JAR 中没有父目录 (net/mintern/primitive)。
这是正常的,还是这可能是我的问题的原因?我尝试了不同的includes,更改为jar 而不是jar-no-fork,明确添加<attach>true</attach>,使用build-helper-maven-plugin 到add-source,可能还有更多我忘记了——没有任何效果。 Maven Source Plugin configuration 似乎没有提供任何方法来调整 JAR 中的路径。
你能帮我弄清楚这里发生了什么吗?您可以通过添加此依赖项将项目包含在您的 POM 中:
<groupId>net.mintern</groupId>
<artifactId>primitive</artifactId>
<version>1.2</version>
完整的 POM 可以查看on GitHub,如果您愿意尝试构建它,可以使用git clone https://github.com/mintern-java/primitive.git 和git checkout 1.2 查看有问题的项目。
编辑:我设法使用 maven-jar-plugin 和 build-helper-maven-plugin 的不合规组合解决了这个问题; POM 是 1.2.1 版。不过,我仍然对适当的 maven-source-plugin 修复感兴趣。
【问题讨论】:
-
所以您声称这是 maven-sources-plugin 的错误?所以请提交 jira jira.codehaus.org/browse/MSOURCES 除此之外,我的假设是您的
fmpp-maven-plugin<outputDirectory>target/generated-sources/net/mintern/primitive</outputDirectory>配置似乎是问题所在。你应该把它改成<outputDirectory>target/generated-sources/</outputDirectory>,但你必须在你的freemaker tempale中提供一个包。 -
你的预感是正确的!当我将
net/mintern/primitive层次结构添加到我的templates目录时(这样我就可以直接输出到target/generated-sources),sources.jar出来是正确的。如果你想把你的评论变成答案,我很乐意接受。否则,我会在几个小时后自己添加答案。 -
非常感谢您抽出宝贵时间查看!我假设插件通过查看某些目录来操作,而不是通过相互连接。当我试图自己解决问题时,这让我走上了错误的道路。
标签: java maven jar generated-code maven-source-plugin