0

通过 mvn deploy 上传到远程存储库的 pom 文件可以在其名称中包含分类器吗?

例如,如果我有工件Webapp-1.0.warWebapp-1.0-CLASSIFIER.war我可以轻松拥有Webapp-1.0.pomandWebapp-1.0-CLASSIFIER.pom吗?

我希望能够将具有多个分类器的工件部署到同一个存储库,但mvn deploy目标总是失败,因为它试图上传已经存在的 pom。

如果我可以避免它,我不想使用mvn deploy:deploy-file它,因为我不想使我的 CI 构建变得不必要地复杂化,即,必须指定 file/url 作为配置参数,因为文件和 url 会根据我是否正在部署而改变快照/发布版本。

4

3 回答 3

2

你的问题是对Maven的理解。如果您生成具有分类器的工件,则意味着具有描述使用分类器创建工件的 pom 以及没有分类器的工件。换句话说,你的问题可以通过一个 pom 文件来解决。此外,您可以通过一次调用maven-dependency-plugin调用来部署一个工件和多个带有分类器的工件,如下所示:

mvn deploy:deploy-file
-DgroupId=com.soebes.test
-DartifactId=x1
-Dversion=2.7.5-SNAPSHOT
-Dfile=TheMainArtifact.jar
-Dclassifiers=first,second
-Dfiles=firstFile,secondFile
-Dtypes=zip,xml
-DrepositoryId=RepositoryId 
-Durl=URLOfTheRepository

使用上面的方法(在一行中),您可以使用单个部署命令部署多个文件,而无需更改 Neuxs 或任何其他存储库管理器的配置以允许重新部署(错误的方式!)。

于 2013-09-10T20:07:00.690 回答
0

我以前也遇到过这种情况。据我所知,不允许使用分类的 POM。

诀窍是配置远程仓库以允许更新 POM,同时不允许重新部署其他工件。

在 Nexus 中,这是通过存储库目标完成的。匹配存储库中 POM 的模式是.*/(?!.*\.pom).*. 目标链接到权限,这些权限可以分配给角色,然后分配给用户。(这里的记忆有点模糊,我得到了这个工作,然后决定deploy:deploy-file改用。)

于 2013-09-10T19:01:25.153 回答
0

没有分类 pom 这样的东西。对于每个 groupId + artifactId + version,只有一个 pom,这个 pom 也用于附加/分类的工件。因此,这意味着例如主工件和所有附加工件具有相同的依赖关系。大多数使用的附加工件是javadocsources,这非常有意义。

于 2013-09-10T20:04:41.773 回答