【问题标题】:Maven: How to include jars in Eclipse, which are not available in repository?Maven:如何在 Eclipse 中包含存储库中不可用的 jars?
【发布时间】:2011-12-02 03:26:06
【问题描述】:

我已将 JAR 复制到 src\main\webapp\WEB-INF\lib。
我使用日食。如果我将罐子一一添加到项目-> Java 构建路径-> 添加罐子,然后我执行项目-> Maven-> 更新项目配置,它们将被 Maven 删除。并且 Eclipse 显示错误,其中包含“无法解析 xxx”。

Env:
Eclipse Java EE IDE for Web Developers.
Version: Indigo Service Release 1
Build id: 20110916-0149

m2e - Maven Integration for Eclipse 1.0.100.20110804-1717

注意:我不想创建自己的 Maven 存储库。它只会使用一次。
我应该怎么做?

【问题讨论】:

    标签: java maven jar buildpath


    【解决方案1】:

    至少有三种方法可以将 3rd 方 JAR 添加到 Maven 项目中。

    1. 使用 mvn install 命令手动安装
    2. 使用以下标签系统在pom依赖中添加jar文件的位置
    3. 创建一个指向 jar 位置的“虚拟”maven 存储库。

    虽然上面已经建议了方法 1 和 2,但我将重点介绍第三种方法,我觉得它更简洁,不需要任何 mvn 命令,并且可以在任何 IDE 中开箱即用。

    第 1 步:在 pom.xml 中添加本地“虚拟”存储库的位置

    <repositories>
        <repository>
            <id>repo</id>
            <name>repo</name>
            <url>file:${project.basedir}/src/main/resources/lib</url>
        </repository>
    </repositories>
    

    这里的“虚拟”存储库位置是我的项目目录的“lib”文件夹

    第 2 步:将 jar 依赖项添加到您的 pom.xml 中

        <dependency>
            <groupId>com.cloudera.impala</groupId>
            <artifactId>impala-frontend</artifactId>
            <version>0.1-SNAPSHOT</version>
        </dependency>
    

    选择任何 groupId,但确保 artifactId 和 version 的格式为 &lt;artifactId&gt;-&lt;version&gt;.jar(第 3 方 jar 的名称)

    第 3 步:根据步骤 2 中提到的 groupId、artifactId 和版本在本地“虚拟”存储库中创建文件夹结构。所以在这种情况下,文件夹结构将是/src/main/resources/lib/com/cloudera/impala/impala-frontend/0.1-SNAPSHOT/

    将您的 jar 放在版本文件夹中并构建您的项目。 您将获得以下输出,它将您的“虚拟”存储库视为您的 3rd 方 jar 的提供者。

    [INFO] Downloading from repo: file:C:\Users\skumar\eclipse-workspace\chdQueryBuilder/src/main/resources/lib/com/cloudera/impala/impala-frontend/0.1-SNAPSHOT/maven-metadata.xml
    [INFO] Downloading from repo: file:C:\Users\skumar\eclipse-workspace\chdQueryBuilder/src/main/resources/lib/com/cloudera/impala/impala-frontend/0.1-SNAPSHOT/impala-frontend-0.1-SNAPSHOT.pom
    [WARNING] The POM for com.cloudera.impala:impala-frontend:jar:0.1-SNAPSHOT is missing, no dependency information available
    [INFO] Downloading from repo: file:C:\Users\skumar\eclipse-workspace\chdQueryBuilder/src/main/resources/lib/com/cloudera/impala/impala-frontend/0.1-SNAPSHOT/impala-frontend-0.1-SNAPSHOT.jar
    [WARNING] Could not validate integrity of download from file:C:\Users\skumar\eclipse-workspace\chdQueryBuilder/src/main/resources/lib/com/cloudera/impala/impala-frontend/0.1-SNAPSHOT/impala-frontend-0.1-SNAPSHOT.jar: Checksum validation failed, no checksums available
    [WARNING] Checksum validation failed, no checksums available from repo for file:C:\Users\skumar\eclipse-workspace\chdQueryBuilder/src/main/resources/lib/com/cloudera/impala/impala-frontend/0.1-SNAPSHOT/impala-frontend-0.1-SNAPSHOT.jar
    [INFO] Downloaded from repo: file:C:\Users\skumar\eclipse-workspace\chdQueryBuilder/src/main/resources/lib/com/cloudera/impala/impala-frontend/0.1-SNAPSHOT/impala-frontend-0.1-SNAPSHOT.jar (7.0 MB at 79 MB/s)
    [INFO] 
    
    

    【讨论】:

      【解决方案2】:

      要添加不在本地存储库中的外部 JAR 文件,只需右键单击主源文件夹并从构建路径菜单中选择:“配置构建路径”,然后导航到库选项卡并单击“添加外部 JAR 文件”。接下来,找到您要添加为库的 JAR(或 zip)文件,然后单击确定。

      恭喜,您现在已成功将外部 JAR(或 zip)添加到构建路径中,您现在可以从项目中的该 JAR 文件导入任何类而不会抛出错误Picture How-To :) http://hostthenpost.org/uploads/541be8420657320c74489ff8d456ad08.png

      【讨论】:

      • 这只适用于 IDE。如果您尝试安装 Maven 项目,它会失败。
      【解决方案3】:

      我认为除非您别无选择,否则不应使用系统依赖方法,这是因为您在这里失去了整个“构建可移植性”。 当然,您可以将 jar 与项目的源文件一起存储在源代码控制系统中,但我认为这也不是一个好方法......

      仅使用 install:install-file 还不够好 - 这确实会以正确的格式将 jar 部署到您的本地存储库中,但是当您移动到另一台计算机并开始在那里构建您的项目时会发生什么? 你需要再做一次。

      因此,如果您不想安装 nexus/artifactory(我相信这是最好的解决方案),您可能应该创建另一个存储库(仅在某些服务器上的文件系统中),然后部署jars 那里(您可以按照这里的建议使用 mvn install:install-file ,然后复制整个树)。现在您可以配置 apache Web 服务器并通过 http 访问包含所有 jar 的目录。我不认为它比 nexus/artifactory 方法更好,但如果您熟悉 apache Web 服务器,它可能会更容易一些。 为了让您的 Maven 了解这个新存储库,您需要编辑 %MAVEN_HOME%\conf\settings.xml 文件

      【讨论】:

        【解决方案4】:

        将此添加到Systems Dependency。


        如果您想将此(以 jquantlib 为例)添加到 maven 本地 repo 使用:

        mvn install:install-file -Dfile=./jquantlib-0.2.4.jar -DgroupId=org.jquantlib -DartifactId=jquantlib -Dversion=0.2.4 -Dpackaging=jar
        

        为了做到这一点,我使用了一个批处理文件

        @echo off
        
        cd lib
        
        CMD /C "mvn install:install-file -Dfile=./jquantlib-0.2.4.jar -DgroupId=org.jquantlib -DartifactId=jquantlib -Dversion=0.2.4 -Dpackaging=jar"
        CMD /C "mvn install:install-file -Dfile=./jquantlib-helpers-0.2.4.jar -DgroupId=org.jquantlib -DartifactId=jquantlib-helpers -Dversion=0.2.4 -Dpackaging=jar"
        CMD /C "mvn install:install-file -Dfile=./jquantlib-samples-0.2.4-ubber.jar -DgroupId=org.jquantlib -DartifactId=jquantlib-ubber -Dversion=0.2.4 -Dpackaging=jar"
        CMD /C "mvn install:install-file -Dfile=./jquantlib-samples-0.2.4.jar -DgroupId=org.jquantlib -DartifactId=jquantlib-samples -Dversion=0.2.4 -Dpackaging=jar"
        
        CMD /C "mvn install:install-file -Dfile=./ta-lib-0.4.0.jar -DgroupId=com.tictactec -DartifactId=ta-lib -Dversion=0.4.0 -Dpackaging=jar"
        

        您可以在其他系统上使用类似的脚本文件。

        【讨论】:

          【解决方案5】:

          并非所有库都可以在公共 Maven 存储库中找到,例如您自己的库或专有库。无论如何,首先你可以search the Maven Repository,也许其中一些在那里。

          如果它们确实不存在,并且您不想安装 Nexus 或 Artifactory,则可以选择以下两种方法之一:

          • 在本地存储库缓存中安装 jar,无需创建特殊存储库。请参阅instructions on mkyong。

          • 另一种方法是使用系统依赖项,您只需在文件系统中放置一条到达 Jar 的路径。这是一种不太推荐的方法,但如果你真的想要它会起作用。这是official documentation。

          【讨论】:

          • 实际上,这是一个非常古老的项目,JAR 太多。我不想在本地存储库中安装 JAR。
          • 你可以使用系统依赖。我已将其添加到答案中。
          • 我真的不喜欢方法 2。首先,一个 jar 到一个 denpendcy;其次,我需要手动逐个添加依赖项的 JAR 太多。所以,如果没有更好的方法,我必须采用方法1来一一安装本地存储库。谢谢!
          • 一如既往,“体力劳动过多”的解决方案是“让电脑来做”。编写一个脚本,使用 .jar 文件列表更新您的配置文件。 ;-)
          • Chris Nava,一个依赖协调,groupId,artifactId 和版本怎么样?
          猜你喜欢
          • 2011-05-18
          • 2012-03-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-03
          • 2011-02-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多