我在解決第三方包的子依賴問題時遇到了問題。我是一位Maven初學者。基本上,它是這樣的:Maven本地依賴不能解決子依賴問題
git clone git://github.com/unidata/thredds.git
cd thredds
mvn install
一切的偉大工程和東西安裝到~/.m2
。現在,我寫我自己的代碼,使用了我剛安裝的軟件包:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>test</artifactId>
<packaging>jar</packaging>
<version>0.1</version>
<name>Test Package</name>
<dependencies>
<dependency>
<groupId>edu.ucar</groupId>
<artifactId>netcdf</artifactId>
<version>4.3.8-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
好吧,當我運行mvn package
這也是偉大工程。找到netcdf
工件。現在,當我嘗試運行我的代碼時,我開始沿着一條長路徑ClassNotFoundException
,不得不將所有netcdf
的依賴關係添加到我的類路徑中。
我做錯了什麼,或者thredds
軟件包及其所有依賴關係是否會自動獲取?
編輯:該thredds包有許多子模塊,其中之一是netcdf。我的代碼只依賴於netcdf jar。
編輯:快照版本被安裝
$ ls -l ~/.m2/repository/edu/ucar/netcdf/4.3.8-SNAPSHOT/
total 4272
-rw-rw-r-- 1 nwatkins nwatkins 700 2012-03-29 23:23 maven-metadata-local.xml
-rw-rw-r-- 1 nwatkins nwatkins 182 2012-03-29 23:23 _maven.repositories
-rw-rw-r-- 1 nwatkins nwatkins 4357494 2012-03-29 23:23 netcdf-4.3.8-SNAPSHOT.jar
-rw-rw-r-- 1 nwatkins nwatkins 7840 2012-03-29 22:28 netcdf-4.3.8-SNAPSHOT.pom
編輯:運行這是在一個單一的文件Test.java
$ java -cp target/test-0.1.jar Test
編輯的代碼:第一錯誤消息
$ java -cp目標/測試0.1.jar測試
Exception in thread "main" java.lang.NoClassDefFoundError: ucar/ma2/InvalidRangeException
Caused by: java.lang.ClassNotFoundException: ucar.ma2.InvalidRangeException
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
編輯:然後我就嘗試將依賴的jar手動添加到類路徑
$ java -cp ../thredds/cdm/target/netcdf-4.3.8-SNAPSHOT.jar:target/test-0.1.jar Test
xception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at ucar.nc2.NetcdfFile.<clinit>(NetcdfFile.java:97)
at Test.main(Test.java:37)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
... 2 more
的slf4j
包也~/.m2
。之後我停止嘗試將其添加到類路徑中,因爲它看起來像是錯誤的方法。 at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
哪裏是對作爲依賴關係的thredds的引用?我只看到netcdf作爲依賴? – khmarbaise 2012-03-30 15:10:33
啊,對不起。 Thredds軟件包包含許多構建和安裝的子模塊,其中之一是netcdf。我的程序只依賴於netcdf軟件包。 – 2012-03-30 15:12:32
如果netcdf軟件包確實是SNAPSHOT,那麼您是否擁有正確的版本?此外,你如何運行你的代碼? – khmarbaise 2012-03-30 15:16:58