当我在常春藤中使用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);
}
}
}
}
答案 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任务转换到另一个方向。