在常春藤的convertopom任务。如何在publication字段中添加更多工件

时间:2013-01-22 08:08:26

标签: maven ivy

当我在常春藤中使用convertpom任务将pom.xml转换为ivy.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);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这真的展示了Maven和常春藤之间的主要区别......

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

我无法看到任何方法在常春藤中构建完整的“出版物”部分而无法访问Maven模块的文件系统。您使用的是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任务转换到另一个方向。