我在解决第三方包的子依赖问题时遇到了问题。我是一位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