【发布时间】:2012-03-30 15:01:36
【问题描述】:
我在解决来自第三方包的子依赖项时遇到问题。我是一个 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 target/test-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)
edit:然后我只是尝试手动将依赖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 中。在此之后,我停止尝试将内容添加到类路径中,因为这似乎是错误的方法。
在 java.lang.ClassLoader.loadClass(ClassLoader.java:266)
【问题讨论】:
-
在哪里引用 thredds 作为依赖?我只将 netcdf 视为依赖项?
-
啊,对不起。 thredds 包有许多构建和安装的子模块,其中之一是 netcdf。我的程序只依赖于 netcdf 包。
-
如果 netcdf 包真的是 SNAPSHOT 如果是,你有正确的版本吗?此外,您如何运行代码?
-
我在帖子底部添加了编辑以解决您的最后 2 个问题。
-
嗯。您能否发布整个错误消息,特别是 ClassNotFoundException 部分...可能是在错误的方向搜索。
标签: java maven dependencies