Maven并没有拉扯我的依赖

时间:2015-07-12 15:30:13

标签: java maven

我有

mvn依赖:解决

[INFO] [dependency:resolve {execution: default-cli}]
[INFO] 
[INFO] The following files have been resolved:
[INFO]    junit:junit:jar:3.8.1:test
[INFO]    org.jsoup:jsoup:jar:1.8.2:compile

在pom.xml中

 39   <dependency>                                                                  
 40         <groupId>org.jsoup</groupId>                                            
 41         <artifactId>jsoup</artifactId>                                          
 42         <version>1.8.2</version>                                                
 43   </dependency>                                                                 
 44   </dependencies>  

但是在运行代码时

java -jar /home/andref/AndroidStudioProjects/PostCrossJsoup/postcrossing-jsoup/target/postcrossing-jsoup-1.0-SNAPSHOT.jar

我得到了

Hello World!
class com.far.postcrossing.jsoup.Connect Connect fetch https://www.postcrossing.com method GET
Exception in thread "main" java.lang.NoClassDefFoundError: org/jsoup/Jsoup
        at com.far.postcrossing.jsoup.Connect.fetch(Connect.java:57)
        at com.far.postcrossing.jsoup.Connect.getCSRF(Connect.java:37)
        at com.far.postcrossing.jsoup.Auth.goAuth(Auth.java:45)
        at com.far.postcrossing.jsoup.App.main(App.java:13)
Caused by: java.lang.ClassNotFoundException: org.jsoup.Jsoup
        at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 4 more

这个例外它找不到依赖

    <configuration>
        <archive>
                <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>com.far.postcrossing.jsoup.App</mainClass>
                </manifest>
        </archive>
        <descriptorRefs>
     <descriptorRef>jar-with-dependencies</descriptorRef>
   </descriptorRefs>
        </configuration>

1 个答案:

答案 0 :(得分:1)

从配置中,您的项目具有与jsoup的编译依赖关系。

您的项目在执行应用程序时失败。 如果在编译期间确实需要jsoup,那么如果maven没有下载/解析jsoup依赖项,编译阶段就会失败。

您更有可能没有正确配置程序集插件,甚至使用错误的jar(没有依赖项的jar)。

根据Maven Assembly Plugin Page,具有依赖关系的jar的默认名称为<projectname>-<version>-jar-with-dependencies.jar

来自Maven Assembly Plugin Page

  

然后,要创建项目程序集,只需从默认生命周期执行正常的程序包阶段:   你需要明确地将它附加到一个阶段Execution: Building an Assembly

     

mvn package当此构建完成时,您应该看到该文件中的文件   目标目录,其名称类似于以下内容:

     

target/sample-1.0-SNAPSHOT-jar-with-dependencies.jar

在你的情况下,预期的jar是这样的: target/postcrossing-jsoup-1.0-SNAPSHOT-jar-with-dependencies.jar