如何在maven中添加jar依赖?

时间:2015-06-27 01:03:37

标签: java maven-3

当我跑步时

mvn compile

我得到package com.ibm.icu.util does not exist。所以我下载了ICU4J jar并将其安装到本地存储库中。我在.m2/repository/com/ibm/icu/icu4j/3.4.4/icu4j-3.4.4.jar确认了这一点。在该jar文件中是缺少的类文件com/ibm/icu/util/Calendar.class。然后我将以下内容添加到pom.xml

的依赖项部分
<dependency>
   <groupId>com.ibm.icu</groupId>
   <artifactId>icu4j</artifactId>
   <version>3.4.4</version>
</dependency>

但是当我再次运行mvn compile时,我得到了同样的错误。我做错了什么?

3 个答案:

答案 0 :(得分:1)

您应该避免手动添加依赖项。

如果您不了解所需依赖关系的groupId和artifactId,请在http://mvnrepository.com/搜索它。通常,groupId匹配jar文件中的包名称。

对于您的情况,依赖关系已经存在:http://mvnrepository.com/search?q=com.ibm.icu 因此,转到http://mvnrepository.com/artifact/com.ibm.icu/icu4j并获取所需的依赖项版本,例如55.1:http://mvnrepository.com/artifact/com.ibm.icu/icu4j/55.1 抓取maven依赖xml并将其放到你的pom.xml文件中:

<dependency>
    <groupId>com.ibm.icu</groupId>
    <artifactId>icu4j</artifactId>
    <version>55.1</version>
</dependency>

如果您没有找到您的依赖关系,请尝试在谷歌中找到它。有时,可能会在某些公司公共存储库中找到依赖关系,而不是central。在这种情况下,您需要将第三方存储库添加到pom.xml的repositories section

如果您无法在公共存储库中找到您的依赖项,那么您有三个选项:

A。将jar安装到内部存储库服务器(例如nexus)

B。将JAR文件放入项目来源和declare project maven repository

<repositories>
    <repository>
        <id>my-local-repo</id>
        <url>file://${basedir}/my-repo</url>
    </repository>
</repositories>

重要提示:您应该将maven repository layout保留在本地存储库中。

<强>℃。 [不良做法] 使用maven install plugin将自定义jar安装到计算机上的本地存储库中。但这不是一个坏事。

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=path-to-your-artifact-jar -DpomFile=path-to-pom

<强> d。 [不良做法] 将system dependency绝对路径一起使用到JAR文件中,虽然这是一种不好的做法,应该避免使用。

<dependency>
  <groupId>test</groupId>
  <artifactId>test</artifactId>
  <version>X.Y.Z</version>
  <scope>system</scope>
  <systemPath>${user.home}/jars/my.jar</systemPath>
</dependency>

答案 1 :(得分:0)

您不应该手动将内容安装到maven存储库目录中。该目录由maven自己维护。

依赖关系的工作方式是,当您运行mvn compile或其他目标时,它将连接到maven中央存储库并下载所需的依赖项及其依赖项。

如果您手动安装jar文件,它可能没有它的依赖项。那个icu神器可能还有其他依赖的东西。 Maven将自动解决这些依赖关系。

我建议使用mvn clean install这将清理目标目录并重建所有内容。

如果无法下载,则可能需要更改maven配置。例如,如果您位于代理服务器后面,则需要使用代理凭据配置maven。

此外,如果您手动将任何内容复制到.m2 / repository /目录中,则应删除它并让maven将其正确放入其中。

maven的美妙之处在于,您不必担心下载罐子等问题。它只是为你处理。让它做它的工作。

答案 2 :(得分:0)

如果你有像JFrog这样的内部神器,也许你应该检查那个罐子是否存在。不要手动下载到.m2,因为它至少很奇怪。最多可以手动上传jar中的jar。