将许多第三方 jar 添加到 Maven Eclipse 运行时

Adding many third party jars to Maven Eclipse runtime

我有一组大约 20 多个第三方 jar,我需要将它们添加到用 Java 编写的 Eclipse Maven 项目的运行时。 mvnrepository.com 不提供这些罐子。我怎样才能做到这一点?

我尝试 Build Path.. Configure Build Path 并手动添加了 jar,但这并不能使 jar API 在 Spring MVC 控制器中可用,因为这些 jar 已添加到构建路径并且不是运行时。

然后我按照 this other posting 尝试了 Project Properties -> Deployment Assembly -> Add -> Archives from file system。这将 jars 导入 /WEB-INF/lib,但没有使它们的 API 可用。

然后我将 these instructions for importing 3rd party jars 读入一个 maven 项目,但是说明说要使用这行代码 mvn install:install-file -Dfile=<path-to-file>。如您所见,当我要添加 20 多个第三方 jar 时,这段代码只指定了一个 jar。 Maven link 也没有指定在何处或何时键入代码。

我是否将终端导航到 Maven 存储库的根目录,然后键入具有 20 个变体的代码行,每个 jar 一次?

每次我在 Eclipse 中进行 Maven 更新时我都要重复这个吗?显然必须有更简单的方法。

让 Eclipse Maven 将所有 20 多个 jar 添加到我的项目运行时的最简单和最有效的方法是什么,以便我的 Spring mvc 控制器可以调用 APIs我尝试 Run As... Run on server,这样 jars 也与 Eclipse Maven 创建的任何 war 文件捆绑在一起?**

编辑

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

我认为解决此问题的最简单方法是将您的 jars 添加到您的 maven 本地存储库。 SO here and also here 上有这个的答案。然后,这些 jar 将在 Eclipse 中可用,但在 eclipse 外部也可用于任何使用 maven 作为构建工具的项目,并且在正确引用 jar 的位置(正确提供 groupId、artifactId 和版本依赖信息),如以下示例所示:

<dependencies>
    ....
    <dependency>
        <groupId>org.matlabcontrol</groupId>
        <artifactId>matlabcontrol</artifactId>
        <version>4.1.0</version>
     </dependency>
</dependencies>

然后您可以轻松编写一个 .bat 或 .sh(取决于 OS)来一劳永逸地执行此操作。

[编辑] @CodeMed 关于您在评论中分享的 link 背后的罐子,其中一些罐子彼此相关,因此将与相同的 groupId 共享相同的版本,而且肯定是不同的 artifactIds

示例:

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

很明显后缀4的parts number是jar的版本号。所以你已经有了版本号,因为它对许多 jar 来说很常见,所以在你的 .bat 文件中为它定义一个变量并在你的 pom.xml 文件中为它定义一个 属性 对你有利。

此外,groupId 对于所有相关的 jar 通常都是相同的。因此,您可能会怀疑 groupId 会是 org.eclipse.emf,如果您 google 这个: maven dependency for org.eclipse.emf + 2.5.0.v200906151043 您会在其他 link 中找到一个 link 到一个 pom.xml 相关 github 项目上的文件具有以下依赖信息

我现在合乎逻辑地怀疑 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 文件中,您需要使用 call 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 并在 运行ning 之后您可以手动检查您的 maven 本地存储库中所有 jar 的安装是否成功。