2013-01-22 29 views
0

當我使用convertpom任務常春藤轉換一個pom.xmlivy.xml,我得到默認的出版物常春藤的convertopom任務。如何更文物添加到出版物領域

<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); 
      } 
     } 
    } 
} 

回答

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任務在另一個方向轉換。

+0

我使用Nexus和Ivy。 – Parth