据我所知,使用maven部署第三方二进制工件是这样的:
mvn deploy:deploy-file -DgroupId=<group-id> \
-DartifactId=<artifact-id> \
-Dversion=<version> \
-Dpackaging=<type-of-packaging> \
-Dfile=<path-to-file> \
-DrepositoryId=<id-to-map-on-server-section-of-settings.xml> \
-Durl=<url-of-the-repository-to-deploy>
假设我的存储库可以使用scp访问,例如在上面的命令
中-Durl=scpexe://example.org//users/mvnrepo/maven
使用maven 3,此部署命令失败并显示错误消息。
我使用的解决方法是将两个jar:wagon-ssh-common-2.2.jar
和wagon-ssh-external1.0.jar
复制到我的$M2_HOME/lib
目录。
因此我的问题是:为什么Maven不能自己找回合适的货车?
(如果有可能的话,怎么做呢?)
答案 0 :(得分:7)
货车是Maven扩展。您可以按如下方式添加它们:
<project>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh</artifactId>
<version>1.0</version>
</extension>
</extensions>
</build>
</project>
有关详细信息,请查看Maven Wagon页。
答案 1 :(得分:4)
作为直接和简短的回答 :添加第三方要求您拥有:
进一步注意事项
我假设您想要使用第三方库,而不仅仅是发布您自己的库。
如果您想使用第三方库,您真的应该寻找托管它的现有存储库。我很确定你已经搜索过,但这是更好的方法。如果您找到一个,只需将其添加到您的maven repo缓存中。
接下来,如果您没有找到,可以将其添加到您自己的仓库中,假设您已开启。我真的不知道你是否熟悉这一点,这听起来很明显,所以请原谅我。但是存储库不仅是文件服务器。 Carlspring kinldy谈到Nexus是为了举个例子。还有Artifactory和许多其他。它们是真正的应用服务器。所以,你必须有自己的。 它们具有允许您添加工件的接口,提供有关它的一些信息(至少是组,ID,版本)。
最后,Maven处理依赖范式。这不是正式的,只是考虑因素:
所有这些信息都应该放在pom.xml中,它们实际上是由作者放置的(见1),或者至少在Maven中使用时提供(见2)。在所有情况下,它们都来自pom.xml ...是否自动生成...所以你需要一个pom.xml :)。
实际上,发布或使用库会导致同样的问题:您必须提供有关您的开发的信息,以便以更自动化和可信任的方式使用。 它有时候很难看,但这是更好的方法。
如果这听起来很明显,请再次原谅我。但是根据经验,当你没有设法用Maven做某事时,通常是因为这不是很好的方法,即使你的过程比“最伟大的开发过程”要小得多,每个人都应该开车:)