我有一组大约20多个第三方罐子,我需要添加到用java编写的eclipse maven项目的RUNTIME中。这些罐子不能从mvnrepository.com获得。 我该如何做到这一点?
我尝试了Build Path.. Configure Build Path
并手动添加了jar,但这并没有使得Spring MVC控制器中的jar API可用,因为jar被添加到Build Path而不是RUNTIME。
然后我根据this other posting尝试Project Properies -> 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存储库的根目录,然后输入20行变量的代码行,每个jar一次?
每次我在eclipse中进行maven更新时,我会重复这个吗?
显然必须有一种更简单的方法。
让eclipse maven将所有20多个jar添加到项目运行时的最简单,最有效的方法是什么,这样我的spring mvc控制器可以在我尝试Run As... Run on server
时调用API,因此,罐子也被与eclipse maven创建的任何战争文件捆绑在一起?
编辑
@DaveNewton建议编写一个shell脚本。这样的剧本怎么样?
我尝试了mv /path/to/all/the/jars/* /path/to/workspace/MyApp/src/main/webapp/WEB-INF/lib/
然后键入F5
以使jars在/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多个罐子等等。
以下是pom.xml中的依赖标记:
<dependency>
<groupId>my.group.id</groupId>
<artifactId>myartifactid</artifactId>
<version>what goes here?</version>
</dependency>
我猜我会在groupid中添加一些符号,以确保maven在mvnrepository.com上找不到任何具有相同名称的内容。这样可以使用eclipse maven更新。 但是我对版本号使用了什么?许多罐子都有不同的版本号。
另请注意我使用的是linux。 实际的shell脚本和依赖标记会是什么样的?请更正我上面尝试过的工作。
答案 0 :(得分:1)
我认为解决此问题的最简单方法是将您的jar添加到maven本地存储库。 SO here和here都有答案。然后可以在Eclipse中使用jar,也可以在eclipse之外使用maven作为构建工具的任何项目以及正确引用jar的地方(正确提供groupId,artifactId和版本依赖信息),如下例所示:
<dependencies>
....
<dependency>
<groupId>org.matlabcontrol</groupId>
<artifactId>matlabcontrol</artifactId>
<version>4.1.0</version>
</dependency>
</dependencies>
然后你可以轻松编写一个.bat或.sh(取决于操作系统),它将一劳永逸地执行此操作。
[编辑]
@CodeMed关于您在评论中分享的链接背后的jar,其中一些与彼此相关,因此将与同一groupId共享相同的版本,并且肯定是不同的artifactId s
示例:
显然,后缀4部分编号是jar的版本号。所以你已经有了版本号,因为它对很多jar来说很常见,你可以在.bat文件中为它定义一个变量,在你的pom.xml文件中为它定义一个属性。
对于所有相关的罐子,groupId通常也是相同的。因此,你可以怀疑groupId是org.eclipse.emf,如果你谷歌这个:maven dependency for org.eclipse.emf + 2.5.0.v200906151043
你会在其他链接中找到一个链接到相关github项目上的pom.xml文件,其中包含以下依赖信息
我现在可以合理地怀疑artifactId是在一个案例中jar common
的名称留下的,而在另一个案例中是ecore.xmi
。这将通过一个小的谷歌搜索或Mvnrepository检查(例如here,我们看到这个工件ID也以组ID为前缀)
因此,我们会在.bat文件中编写以下类型的指令,以便在我们的本地存储库中安装这些jar
首先定义一个变量来保存版本号
set eclipseEmfVersion=2.5.0.v200906151043
call mvn install:install-file -Dfile=org.eclipse.emf.ecore.xmi_2.5.0.v200906151043.jar -DgroupId=org.eclipse.emf -DartifactId=org.eclipse.emf.ecore.xmi -Dversion=%eclipseEmfVersion% -Dpackaging=jar
call mvn install:install-file -Dfile=org.eclipse.emf.common_2.5.0.v200906151043.jar -DgroupId=org.eclipse.emf -DartifactId=common -Dversion=%eclipseEmfVersion% -Dpackaging=jar
在第二个jar的情况下,我在MvnRepository上发现artifactId没有将groupId设置为其前缀(参见here)
另请注意,在.bat文件中,您需要使用调用mvn(而不是简单的mvn,就像您只需要运行一条指令一样)才能够顺序执行许多maven指令。
在同一模式下,您可以使用groupId:org.openhealthtools.mdht.uml.cda
和版本号1.2.0.201405161834
来区分另一组相关的jar。您可以应用相同的方法在本地存储库中安装它们
这是我运行的成功测试(使用我在解压缩文件的同一目录中创建的bat文件),使用jar列表中的前四个jar
call mvn install:install-file -Dfile=net.sourceforge.lpg.lpgjavaruntime_1.1.0.v200803061910.jar -DgroupId=net.sourceforge.lpg -DartifactId=net.sourceforge.lpg.lpgjavaruntime -Dversion=1.1.0.v200803061910 -Dpackaging=jar
call mvn install:install-file - Dfile=org.apache.commons.lang_2.3.0.v201005080501.jar - DgroupId=org.apache.commons -DartifactId=lang -Dversion=2.3.0.v201005080501 - Dpackaging=jar
call mvn install:install-file - Dfile=org.eclipse.core.runtime_3.8.0.v20120521-2346.jar - DgroupId=org.eclipse.birt.runtime -DartifactId=org.eclipse.core.runtime - Dversion=3.8.0.v20120521-2346 -Dpackaging=jar
set cdaversion=1.2.0.201405161834
call mvn install:install-file - Dfile=org.openhealthtools.mdht.uml.cda.ihe_1.2.0.201405161834.jar - DgroupId=org.openhealthtools.mdht.uml.cda -DartifactId=ihe - Dversion=%cdaversion% -Dpackaging=jar
您可以轻松完成.bat,在运行后,您可以手动检查maven本地存储库中所有jar的成功安装。