spring 将许多第三方jar添加到Maven Eclipse运行时[重复]

rekjcdws  于 2023-08-02  发布在  Spring
关注(0)|答案(1)|浏览(102)

此问题在此处已有答案

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脚本和依赖标记是什么样子的?

izj3ouym

izj3ouym1#

我认为解决这个问题最简单的方法是将jar添加到maven本地存储库中。在SO herehere上有答案。然后,jar将在Eclipse中可用,但对于使用maven作为构建工具的任何项目,也可以在Eclipse之外使用,并且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
示例如下:

  • org.eclipse.emf.common_2.5.0.v200906151043.jar
  • org.eclipse.emf.ecore.xmi_2.5.0.v200906151043.jar

显然,后缀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名称commonecore.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文件中,您需要使用call mvn(而不是简单的mvn,因为您只需要运行一条指令)才能顺序执行许多maven指令。
在相同的模式中,您可以使用groupId区分另一组相关的jar:org.openhealthtools.mdht.uml.cda和版本号1.2.0.201405161834。您可以应用相同的方法将它们安装到本地存储库中
下面是我使用jar列表中的前四个jar成功运行的测试(从我在解压文件的同一目录中创建的bat文件)

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的成功安装。

相关问题