0

convertpomIvyでタスクを使用してをに変換するpom.xmlivy.xml、デフォルトのパブリケーションが取得されます

<publications>
    <artifact name="XYZ" type="jar" ext="jar" conf="master"/>
</publications>

pom.xml変換時にアーティファクトが追加されるように、を変更するにはどうすればよいですか。converttopomはどこからアーティファクトを取得しますか。また、タイプを変更するにはどうすればよいですか?

ivy:publish通話中にこれらをオーバーライドすることは可能ですか?

convertpom antタスクでこのコードが見つかりましたが、どのように使用されているかわかりません。

   private void addSourcesAndJavadocArtifactsIfPresent(
         PomModuleDescriptorBuilder mdBuilder, ParserSettings ivySettings) {
     if (mdBuilder.getMainArtifact() == null) {
         // no main artifact in pom, we don't need to search for meta artifacts
        return;
     }
     ModuleDescriptor md = mdBuilder.getModuleDescriptor();
     ModuleRevisionId mrid = md.getModuleRevisionId();
     DependencyResolver resolver = ivySettings.getResolver(
         mrid);

    if (resolver == null) {
        Message.debug("no resolver found for " + mrid 
                         + ": no source or javadoc artifact lookup");
    } else {
        ArtifactOrigin mainArtifact = resolver.locate(mdBuilder.getMainArtifact());

        if (!ArtifactOrigin.isUnknown(mainArtifact)) {
            String mainArtifactLocation = mainArtifact.getLocation();

            ArtifactOrigin sourceArtifact = resolver.locate(mdBuilder.getSourceArtifact());
            if (!ArtifactOrigin.isUnknown(sourceArtifact)
                    && !sourceArtifact.getLocation().equals(mainArtifactLocation)) {
                Message.debug("source artifact found for " + mrid);
                mdBuilder.addSourceArtifact();
            } else {
                // it seems that sometimes the 'src' classifier is used instead of 'sources'
                // Cfr. IVY-1138
                ArtifactOrigin srcArtifact = resolver.locate(mdBuilder.getSrcArtifact());
                if (!ArtifactOrigin.isUnknown(srcArtifact)
                        && !srcArtifact.getLocation().equals(mainArtifactLocation)) {
                    Message.debug("source artifact found for " + mrid);
                    mdBuilder.addSrcArtifact();
                } else {
                    Message.debug("no source artifact found for " + mrid);
                }
            }
            ArtifactOrigin javadocArtifact = resolver.locate(mdBuilder.getJavadocArtifact());
            if (!ArtifactOrigin.isUnknown(javadocArtifact) 
                    && !javadocArtifact.getLocation().equals(mainArtifactLocation)) {
                Message.debug("javadoc artifact found for " + mrid);
                mdBuilder.addJavadocArtifact();
            } else {
                Message.debug("no javadoc artifact found for " + mrid);
            }
        }
    }
}
4

1 に答える 1

0

これは、Mavenとivyの重要な違いの1つを実際に示しています...

ivyファイルは、モジュールに含まれるすべてのファイルを明示的にリストします。一方、MavenPOMはそうではありません。代わりに、ファイル名を一意にするために、それぞれ異なる「分類子」を使用して、0個以上の追加ファイルをMavenに保存できます。

Mavenモジュールのファイルシステムにアクセスしないと、ivyで完全な「パブリケーション」セクションを構築する方法がわかりません。Mavenリポジトリマネージャーを使用していますか?NexusにはRESTAPIがあり、モジュール内のすべてのファイルを取得するために呼び出すことができます(考えてみてください)

もう1つのアイデアは、convertpomタスクを拡張するリクエストを送信することです。使用可能な分類子を一覧表示できるようにするオプションの子タグをいくつか作成します。

<ivy:convertpom pomFile="pom.xml" ivyFile="ivy.xml">
    <classifier name="sources"/>
    <classifier name="javadoc"/>
    <classifier name="archive" type="tar.gz/>
</ivy:convertpom>

この変更があまり人気がない(または役立つ)とは思いません。ほとんどの人は、makepomタスクを使用して反対方向に変換しています。

于 2013-01-22T18:20:18.583 に答える