繁体   English   中英

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

[英]maven-source-plugin builds sources.jar, but it's unusable by IDEs

我有一个从生成的源构建的Maven项目 我正在使用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.javatarget/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-sourceadd-source ,还有可能我忘了更多—有任何影响。 Maven源插件配置似乎没有提供任何方法来调整JAR中的路径。

您能帮我弄清楚这里发生了什么吗? 您可以通过添加以下依赖项将项目包含在POM中:

<groupId>net.mintern</groupId>
<artifactId>primitive</artifactId>
<version>1.2</version>

可以在GitHub上查看完整的POM,如果您愿意尝试构建它,则可以使用git clone https://github.com/mintern-java/primitive.git git checkout 1.2有问题的项目,然后进行git checkout 1.2

编辑:我设法使用maven-jar-plugin和build-helper-maven-plugin的组合来解决这个问题; POM是1.2.1版。 不过,我仍然对适当的maven-source-plugin修复感兴趣。

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

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

似乎是问题所在。 您应该将其更改为:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM