本文旨在解决Maven下载依赖时出现的错误: Could not resolve dependencies for project <your-project-name>: Could not find artifact org.eclipse.jdt:org.eclipse.jdt.core:jar:3.12.0.v20160516-2131 in sonatype-oss-public (https://oss.sonatype.org/content/groups/public/)html
系统环境: JDK 1.7
,Ubuntu系统(16.04)
java
当我在Java项目运行mvn clean install
的时候,就报错(如上图片):web
[ERROR] Failed to execute goal on project my-app: Could not resolve dependencies for project com.mycompany.app:my-app:jar:1.0-SNAPSHOT: Could not find artifact org.eclipse.jdt:org.eclipse.jdt.core:jar:3.12.0.v20160516-2131 in sonatype-oss-public (https://oss.sonatype.org/content/groups/public/) -> [Help 1]apache
大意就是:Maven在下载依赖(dependency)的时候,找不到这个依赖org.eclipse.jdt:org.eclipse.jdt.core:jar:3.12.0.v20160516-2131
。app
首先,咱们要了解Maven是怎么下载依赖的。eclipse
下载依赖的步骤:
1)先看本地仓库有没有对应的依赖;maven
Before Maven attempts to download a particular artifact from a remote repository it checks the local repository. This is usually located at $HOME/.m2/repository. [1]ide
2)若是有,就不用重复下载了;若是没有的话,就从远程仓库地址下载,远程仓库(repositories)被声明在项目的pom.xml文件中。
(注意:有时候项目中没有声明repository,可是maven也能顺利下载依赖,这是由于除了pom.xml文件中声明的远程仓库地址,Maven还有一个默认的远程仓库地址,即:Maven Central
,这个仓库里面也提供了不少可供下载的依赖。 以下图:)svg
出现如上描述的错误,说明远程仓库没有这个版本的jar包:org.eclipse.jdt:org.eclipse.jdt.core:jar:3.12.0.v20160516-2131
。ui
后来去网上一查,发现是这个jar包的groupid
错误了,不该该是org.eclipse.jdt
,而是org.eclipse.tycho
(参考: https://mvnrepository.com/artifact/org.eclipse.tycho/org.eclipse.jdt.core/3.12.0.v20160516-2131 )。
我原本想直接将org.eclipse.jdt
替换为org.eclipse.tycho
,可是发现项目的pom.xml文件中根本没有关于这个jar的任何描述,天然也无法修改替换。
因此只能本身下载,打开终端输入:
mvn dependency:get -DrepoUrl=http://download.java.net/maven/2/ -Dartifact=org.eclipse.tycho:org.eclipse.jdt.core:3.12.0.v20160516-21314 # 这个就是下载指定jar包的指令 `mvn dependency:get -DrepoUrl=something -Dartifact=group:artifact:version` # 其中 DrepoUrl参数就是远程仓库地址, Dartifact参数就是group id,artifact id和version id的结合。
mkdir -p $HOME/.m2/repository/org/eclipse/jdt/ cp -rf $HOME/.m2/repository/org/eclipse/tycho/* $HOME/.m2/repository/org/eclipse/jdt/ # 这里的 $HOME/.m2/repository/ 是个人本地Maven仓库路径。 # 第一步:先新建文件夹 # 第二步:把 org/eclipse/tycho/ 中的文件(包括咱们须要的jar包也在里面)都拷贝到 org/eclipse/jdt/ 下面
这样的话,再次运行mvn install
的时候,maven先检查本地仓库的时候,就会发现: 本地仓库已经有了项目想要的org.eclipse.jdt.core:3.12.0.v20160516-21314
版本的jar包。
到此问题解决。
[1] How does a maven repository work? https://blog.packagecloud.io/eng/2017/03/09/how-does-a-maven-repository-work/
这里详细解释了Maven 相关的 dependency和repository的概念,仍是很值得一读的。
[2] Maven: Command to update repository after adding dependency to POM https://stackoverflow.com/questions/8563960/maven-command-to-update-repository-after-adding-dependency-to-pom/40020233
这里告诉咱们怎么安装依赖,有些指令还挺有用的,如:mvn dependency:get -Dartifact=groupId:artifactId:version
[3] travis-ci: how to move or rename a file https://stackoverflow.com/questions/48303550/travis-ci-how-to-move-or-rename-a-file
这里是怎么配置travis ci,也能够参考下。
[4] Guide to installing 3rd party JARs https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html
这里是怎么把第三方的jar包(能够理解为本地java项目打包成jar后放到Maven repo中,因此必须明确group id,版本号之类的)安装到本地仓库。
[5] A simple command line to download a remote maven2 artifact to the local repository? https://stackoverflow.com/questions/1776496/a-simple-command-line-to-download-a-remote-maven2-artifact-to-the-local-reposito
告诉咱们在怎么用Maven从远程仓库下载依赖,如:mvn dependency:get -DrepoUrl=something -Dartifact=group:artifact:version
[6] How to get the Maven local repo location? https://stackoverflow.com/questions/5916157/how-to-get-the-maven-local-repo-location
这个告诉咱们怎么看maven的本地仓库地址,最直接简单的指令就是mvn -X
,就会在输出的信息中看到本地仓库地址。
[7] Maven dependency mechanism, how it works https://www.mkyong.com/maven/how-to-use-maven-dependency-to-download-library-automatically/ 这个也讲了maven下载依赖的机制。比较详细。