本文旨在解決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下載依賴的機制。比較詳細。