通过mvn deploy上传到远程存储库的pom文件是否可以在其名称中使用分类器?
例如,如果我有工件Webapp-1.0.war
和Webapp-1.0-CLASSIFIER.war
,我可以轻松拥有Webapp-1.0.pom
和Webapp-1.0-CLASSIFIER.pom
吗?
我希望能够将具有多个分类器的工件部署到同一个存储库,但mvn deploy
目标始终失败,因为它正在尝试上传已经存在的pom。
我不想使用mvn deploy:deploy-file
如果我可以避免它,因为我不希望不必要地使我的CI构建复杂化,即必须指定file / url作为配置参数,因为文件和url将根据我是否部署快照/发布版本而改变。
答案 0 :(得分:1)
你的问题是对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
通过以上(单行),您可以使用单个部署命令部署多个文件,而无需更改Neux或任何其他存储库管理器的配置以允许重新部署(错误的方式!)。
答案 1 :(得分:0)
我之前也遇到过这种情况。据我所知,分类POM是不允许的。
诀窍是配置远程仓库以允许更新POM,同时不允许重新部署其他工件。
在Nexus中,这是通过Repository Targets完成的。与存储库中的POM匹配的模式为.*/(?!.*\.pom).*
。目标将链接到权限,权限可以分配给角色,然后分配给用户。 (记忆在这里有点模糊,我得到了这个工作,然后决定使用deploy:deploy-file
代替。)
答案 2 :(得分:0)
没有分类的pom这样的东西。对于每个groupId + artifactId +版本,只有一个pom,并且此pom也用于附加/分类的工件。所以这意味着,例如主工件和所有附加工件具有相同的依赖关系。
大多数使用过的附件都是javadoc
和sources
,这对我们来说非常有意义。