簡體   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