0

生成されたソースからビルドされた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 が認識しないため、明らかに正しくパッケージ化されていません。Javadoc を含め、他のすべてが正しくビルドされ、機能します。

ライブラリのメイン エントリ ポイントはnet.mintern.primitive.Primitive. プロジェクトがビルドされると、Java ファイルが に生成されtarget/generated-sources/net/mintern/primitive/Primitive.javaます。ただしsources.jarPrimitive.java(およびディレクトリ内のその他すべてprimitive) は JAR のルートにあります。親ディレクトリ ( net/mintern/primitive) が JAR にありません。

これは正常ですか、それとも私の問題の原因でしょうか? 私は別の を試し、の代わりに にincludes変更し、 を明示的に追加し、 を使用し、おそらくもっと忘れていましたが、何も効果がありませんでした。Maven ソース プラグインの構成は、JAR 内のパスを微調整する方法を提供していないようです。jarjar-no-fork<attach>true</attach>build-helper-maven-pluginadd-source

ここで何が起こっているのかを理解するのを手伝ってもらえますか? この依存関係を追加することで、POM にプロジェクトを含めることができます。

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

完全な POM は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 の修正にはまだ興味があります。

4

1 に答える 1

1

それとは別に、私の仮定は、fmpp-maven-plugin の構成:

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

が問題のようでした。それを次のように変更する必要があります。

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

ただし、freemaker テンプレートでパッケージを指定する必要があります。さらに、freemarker プラグインのドキュメントをチェックして、outputDirectory がデフォルトで上記の値で構成されていないかどうかを確認する必要があります。その場合は、pom からこのエントリを完全に削除できます。(デフォルトに従います)。設定より規約。

于 2015-03-20T09:28:31.367 に答える