Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过mvn部署上传到远程存储库的pom文件是否可以在其名称中包含分类器?_Java_Maven_Jenkins_Hudson_Maven 3 - Fatal编程技术网

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

Java 通过mvn部署上传到远程存储库的pom文件是否可以在其名称中包含分类器?,java,maven,jenkins,hudson,maven-3,Java,Maven,Jenkins,Hudson,Maven 3,通过mvn部署上传到远程存储库的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构建复杂化

通过mvn部署上传到远程存储库的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将根据我是否部署快照/发布版本而改变。

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

诀窍是将远程repo配置为允许更新POM,同时不允许重新部署其他工件


在Nexus中,这是通过存储库目标完成的。匹配存储库中pom的模式是
*/(?!.\.pom)。*
。目标链接到特权,特权可以分配给角色,然后再分配给用户。(这里的内存有点模糊,我实现了这一点,然后决定使用
deploy:deploy file

没有分类pom。对于每个groupId+artifactId+版本,都有一个pom,这个pom还用于附加/分类的工件。这意味着,例如,主工件和所有附加工件具有相同的依赖关系。
大多数使用的附加工件是
javadoc
源文件
,对于它们来说,这非常有意义。

您的问题是对Maven的理解。如果您生成一个具有分类器的工件,则意味着具有一个pom,该pom描述了使用分类器创建工件以及不使用分类器创建工件。换句话说,您的问题可以通过使用单个pom文件来解决。此外,您可以使用分类器部署一个工件和多个工件,只需对调用进行一次调用,如下所示:

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

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

切勿配置Nexus a允许重新部署工件,因为如果你允许这样的事情,你将与Maven人工制品的基本思想相矛盾。一次部署意味着只有一次部署。永远不要使用具有相同坐标(GAV)的第二个,以防止覆盖上一个。对于Nexus,如果您已关闭重新部署(同意,设置内容的正确方式),则无法使用deploy:deploy添加已分类工件,即使已分类工件尚不存在。正如OP所说,由于POM不可更新,它将失败。在我测试的场景中,POM从未改变,但我找不到一种方法使
deploy
不包括POM。存储库目标解决了这个问题。我同意你的看法,我也考虑过这个插件——阻止我使用它的原因是我不希望每次我的CI服务器进行构建时都必须指定版本号、存储库等。您对版本/存储库id/url的参数化有什么建议吗?我当前使用
deploy
的过程在这种情况下运行良好。它没有帮助的是允许我轻松添加一个来自单独构建/概要文件的分类器的WAR。也许你问错了问题。如果您的项目生成了一个主war和一个自定义war(使用相同的pom.xml),那么您应该在maven war插件中添加多个执行块()。习惯战争应该使用。通常避免配置文件,我认为您的用例与配置文件的预期用途不匹配。