此问题在此处已有答案:
How do I add third-party jars into local Maven repository? [duplicate](2个答案)
8年前就关门了。
我有一组大约20多个第三方jar,我需要将它们添加到用Java编写的EclipseMaven项目的RUNTIME中。mvnrepository.com上没有这些jar。我怎么能做到这一点?
我尝试了Build Path.. Configure Build Path
并手动添加了jar,但这并不能使jar API在Spring MVC控制器中可用,因为jar被添加到了Build Path而不是RUNTIME。
然后我按照this other posting尝试了Project Properties -> Deployment Assembly -> Add -> Archives from file system
。这将jar导入到/WEB-INF/lib中,但没有使其API可用。
然后,我将these instructions for importing 3rd party jars读入一个maven项目,但说明书上说要使用这行代码mvn install:install-file -Dfile=<path-to-file>
。正如您所看到的,这段代码只指定了一个jar,而我有超过20个第三方jar要添加。maven链接也没有指定在何处或何时键入代码。
我是否将终端导航到Maven存储库的根目录,然后为每个jar输入一行包含20个变体的代码?
每次在Eclipse中进行Maven更新时,我都要重复这一点吗?显然,必须有一个更简单的方法。
让Eclipse Maven将所有20多个jar添加到我的项目的运行时,以便我的Spring mvc控制器可以在我尝试Run As... Run on server
时调用API,并且jar也与Eclipse Maven创建的任何war文件捆绑在一起,最简单有效的方法是什么?**
编辑
@DaveNewton建议写一个shell脚本。这样的剧本会是什么样子?
我尝试了mv /path/to/all/the/jars/* /path/to/workspace/MyApp/src/main/webapp/WEB-INF/lib/
,然后键入F5
,以使jar在/WEB-INF/lib
文件夹中可见,但这并没有解决来自调用API的项目中其他地方代码的编译错误,即使在Project... Clean
之后也是如此。
此外,我希望Eclipse Maven插件能够尽可能多地管理这一点。
编辑2
根据@alainlompo的建议,我设想一个脚本,其中包括以下命令,然后在下面添加依赖项。以下是脚本中可能包含的内容:
mvn install:install-file -Dfile=/thefirst.jar -DgroupId=my.group.id -DartifactId=myartifactid -Dversion={version} -Dpackaging=jar
mvn install:install-file -Dfile=/thesecond.jar -DgroupId=my.group.id -DartifactId=myartifactid -Dversion={version} -Dpackaging=jar
mvn install:install-file -Dfile=/thethird.jar -DgroupId=my.group.id -DartifactId=myartifactid -Dversion={version} -Dpackaging=jar
mvn install:install-file -Dfile=/thefourth.jar -DgroupId=my.group.id -DartifactId=myartifactid -Dversion={version} -Dpackaging=jar
mvn install:install-file -Dfile=/thefifth.jar -DgroupId=my.group.id -DartifactId=myartifactid -Dversion={version} -Dpackaging=jar
mvn install:install-file -Dfile=/thesixth.jar -DgroupId=my.group.id -DartifactId=myartifactid -Dversion={version} -Dpackaging=jar
mvn install:install-file -Dfile=/theseventh.jar -DgroupId=my.group.id -DartifactId=myartifactid -Dversion={version} -Dpackaging=jar
字符串
所有20+jar都是如此。
下面是pom.xml中的依赖标记:
<dependency>
<groupId>my.group.id</groupId>
<artifactId>myartifactid</artifactId>
<version>what goes here?</version>
</dependency>
型
我想我会在groupid中添加一些符号,以确保Maven无法在mvnrepository.com上找到任何同名的东西。这样就可以使用Eclipse Maven更新。但是我该用什么作为版本号呢?许多jar有不同的版本号。
注意我用的是Linux。实际的shell脚本和依赖标记是什么样子的?
1条答案
按热度按时间izj3ouym1#
我认为解决这个问题最简单的方法是将jar添加到maven本地存储库中。在SO here和here上有答案。然后,jar将在Eclipse中可用,但对于使用maven作为构建工具的任何项目,也可以在Eclipse之外使用,并且jar被正确引用(正确提供groupId,artifactId和版本依赖信息),如以下示例所示:
字符串
然后,您可以轻松地编写一个.bat或.sh(取决于操作系统)来一劳永逸地执行此操作。
[编辑] @CodeMed关于你在评论中分享的链接后面的jar,其中一些是相互关联的,因此将共享相同的版本,具有相同的groupId,并且肯定是不同的artifactId
s
示例如下:
显然,后缀4的部件号是jar的版本号。所以你已经有了版本号,因为它对许多jar都是通用的,所以在你的.bat文件中为它定义一个变量,在你的pom.xml文件中为它定义一个属性,这对你是有利的。
此外,groupId对于所有相关的jar通常都是相同的。因此,您可能会怀疑groupId是org.eclipse.emf,如果您在Google上搜索:
maven dependency for org.eclipse.emf + 2.5.0.v200906151043
你会在其他链接中找到一个链接,指向一个相关的github项目上的pom.xml文件,包含以下依赖信息x1c 0d1x的数据
我现在可以合理地怀疑artifactId是jar名称
common
和ecore.xmi
的剩余部分。这将通过一点谷歌搜索或在Mvnrepository上进行检查(例如here,我们看到这个工件ID也以组ID为前缀)因此,我们将在.bat文件中编写以下类型的指令,以便在本地存储库中安装这些jar
首先定义一个变量来保存版本号
型
然而,在第二个jar的情况下,我在MvnRepository上发现artifactId没有将groupId设置为前缀(参见here)
还要注意,在.bat文件中,您需要使用call mvn(而不是简单的mvn,因为您只需要运行一条指令)才能顺序执行许多maven指令。
在相同的模式中,您可以使用groupId区分另一组相关的jar:
org.openhealthtools.mdht.uml.cda
和版本号1.2.0.201405161834
。您可以应用相同的方法将它们安装到本地存储库中下面是我使用jar列表中的前四个jar成功运行的测试(从我在解压文件的同一目录中创建的bat文件)
型
您可以轻松地完成.bat,运行后,您可以手动检查maven本地存储库中所有jar的成功安装。