Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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库作为单个JAR的集合提供时,将其集成到Maven项目中的最佳方式是什么?_Java_Maven_Jar - Fatal编程技术网

当第三方Java库作为单个JAR的集合提供时,将其集成到Maven项目中的最佳方式是什么?

当第三方Java库作为单个JAR的集合提供时,将其集成到Maven项目中的最佳方式是什么?,java,maven,jar,Java,Maven,Jar,我公司使用的其中一个第三方库以zip文件的形式提供给我们,其中包含数十个jar。该库每两周发布一个新版本,因此我正在寻找一种解决方案,它不需要每次发布新版本时都进行大量手动操作。我最近开始使用Maven进行依赖关系管理,我发现很难处理这个特定的第三方库。我应该 将每个jar添加到公司内部存储库中(例如,使用Nexus),然后将每个jar声明为使用此库的任何新项目的依赖项?这是一个艰苦的过程,我无法想象在每一个新版本中都会这样做 创建一个罐子来添加到我们的存储库?如果是,我如何创建它?Maven

我公司使用的其中一个第三方库以zip文件的形式提供给我们,其中包含数十个jar。该库每两周发布一个新版本,因此我正在寻找一种解决方案,它不需要每次发布新版本时都进行大量手动操作。我最近开始使用Maven进行依赖关系管理,我发现很难处理这个特定的第三方库。我应该

  • 将每个jar添加到公司内部存储库中(例如,使用Nexus),然后将每个jar声明为使用此库的任何新项目的依赖项?这是一个艰苦的过程,我无法想象在每一个新版本中都会这样做

  • 创建一个罐子来添加到我们的存储库?如果是,我如何创建它?Maven shade插件需要我首先对库进行mavenise,对吗

  • 还有更好的建议吗


  • 您的第一个选择是最佳实践。我不知道为什么要费劲

  • 创建一个简单的脚本,将各种JAR上传到nexus
  • 使用pom中的属性指定第三方版本,以便通过pom中的简单属性更改可以更改所有DEP
  • 将新版本添加到构建管道需要5分钟的时间


    备选方案:说服第三方设置maven存储库供其客户使用

    这是可能的,但很复杂(但只有一次努力),而且可能是对maven的意图的误用:

  • 使用特定的groupid:artifactId将zip文件上载到本地maven repo
  • 创建依赖于此zip文件的子模块。Tis子模块应仅用于创建uber jar
  • 使用解包目标将zip文件解包到一个目录中
  • 使用maven解压将jar解压到dir
  • 使用maven antrun zip将文件放入uber jar
  • 用于将uber jar安装到本地repo并用作依赖项

  • 在过去,我使用了artifactory并托管了自己的maven repo,然后编写了最烦人的jar/zip部署脚本。这样我就可以更新我的POM文件并将我的新jar上传到repo,一切都很好。因为第三方zip没有控制权,所以对于每个新版本,您需要验证哪些版本已经更改,以及是否添加了任何新jar。@6这正是我所关心的。我正在使用的第三方库有很多JAR,不能保证在以后的版本中会使用相同的版本。@jtahlborn您能给我一些详细信息吗?例如,步骤1:要将各种jar上传到Nexus,我需要一个组id、工件id和每个jar的版本(例如jetty8.3.jar、antlr3.4.0.jar等)。我是创建虚拟组ID等,还是尝试从名称中获取版本(不总是存在)?如果新版本的软件依赖于jetty9.0.jar,我是否不需要跟踪并更新pom?如果我遗漏了什么,很抱歉。@Thea-你关心jar的原始版本,还是zip是一个完整的“产品”版本?另外,这些其他罐子是原始罐子吗(即,你可以使用中央回购协议的普通jetty,还是罐子经过修改)?@jtahlborn拉链是一个完整的产品,所以我不关心具体的罐子。显然,有些JAR可能是从Maven Central下载的,但不能保证。对我来说,最简单的方法是将整个库作为一个工件,而不依赖于它。我知道这不是很像Maven,但这比每次有新的release时都要将每个jar上传到Nexus,或者只是跟踪每个版本中哪些jar发生了变化要容易得多。如果我决定将整个库作为一个工件上传,那么最好的方法是什么?如果没有,还有什么选择?