0

当我convertpom在 Ivy 中使用 task 将 a 转换为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 之间的主要区别之一......

常春藤文件明确列出了模块中包含的所有文件。另一方面,Maven POM 没有。相反,可以在 Maven 中存储零个或多个附加文件,每个文件都具有不同的“分类器”,以使文件名唯一。

如果无法访问 Maven 模块的文件系统,我看不到任何方法可以在 ivy 中构建完整的“出版物”部分。你在使用 Maven 存储库管理器吗?Nexus 有一个 REST API,也许您可​​以调用它来获取模块中的所有文件(只是一个想法)

另一个想法是提交请求以扩展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 回答