maven-source-plugin构建sources.jar,但IDE无法使用它

时间:2015-03-20 05:02:31

标签: java maven jar generated-code maven-source-plugin

我有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。项目构建时,将在target/generated-sources/net/mintern/primitive/Primitive.java生成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修复感兴趣。

1 个答案:

答案 0 :(得分:1)

除此之外我的假设是你的fmpp-maven-plugin的配置:

<outputDirectory>target/generated-sources/net/mintern/primitive</outputDirector‌​y>

似乎是个问题。你应该把它改成:

<outputDirectory>target/generated-sources/</outputDirectory> 

但你必须在你的freemaker模板中提供一个包。此外,您应该检查freemarker插件的文档,以查看outputDirectory是否默认配置为上述值。如果是这样,您可以从您的pom中完全删除此条目。 (遵循默认值)。约定优于配置。