当我跑步时
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
时,我得到了同样的错误。我做错了什么?
答案 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。