2014-01-29 200 views
0

我是Maven的新手,這是對前一個問題的跟進(Attempting to build Mave (with M2E) getting classdef error),回答我的紳士告訴我檢查依賴關係,並且我注意到顯然存在一個衝突。所以我想出瞭如何從logback中排除SLF4J 1.7.5,並使用番石榴的1.7.2版本(因爲我無法弄清楚如何排除依賴關係的依賴...),而且我仍然得到同樣的錯誤我之前,但當我運行的依賴性命令再次似乎沒有被任何錯誤:使用m2e,運行maven編譯時得到noclassdeffound錯誤編譯

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ auth --- 
[INFO] com.v2.auth:auth:jar:0.0.1-SNAPSHOT 
[INFO] +- junit:junit:jar:3.8.1:test 
[INFO] +- ch.qos.logback:logback-classic:jar:1.0.13:compile 
[INFO] | \- ch.qos.logback:logback-core:jar:1.0.13:compile 
[INFO] +- com.jolbox:bonecp:jar:0.8.0.RELEASE:compile 
[INFO] | +- com.google.guava:guava:jar:15.0:compile 
[INFO] | \- org.slf4j:slf4j-api:jar:1.7.2:compile 
[INFO] \- mysql:mysql-connector-java:jar:5.1.6:compile 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 1.346s 
[INFO] Finished at: Wed Jan 29 15:53:43 EST 2014 
[INFO] Final Memory: 12M/149M 

參考,我得到的錯誤是:

Exception in thread "main" java.lang.NoClassDefFoundError: com/ning/http/client/AsyncHttpProvider 
at org.sonatype.aether.connector.async.AsyncRepositoryConnectorFactory.newInstance(AsyncRepositoryConnectorFactory.java:106) 
at org.sonatype.aether.impl.internal.DefaultRemoteRepositoryManager.getRepositoryConnector(DefaultRemoteRepositoryManager.java:346) 
at org.sonatype.aether.impl.internal.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:453) 
at org.sonatype.aether.impl.internal.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:216) 
at org.sonatype.aether.impl.internal.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:193) 
at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:281) 
at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:186) 
at org.sonatype.aether.impl.internal.DefaultRepositorySystem.readArtifactDescriptor(DefaultRepositorySystem.java:279) 
at org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver.resolve(DefaultPluginDependenciesResolver.java:115) 
at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getPluginDescriptor(DefaultMavenPluginManager.java:142) 
at org.apache.maven.plugin.DefaultBuildPluginManager.loadPlugin(DefaultBuildPluginManager.java:59) 
at org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolveFromProject(DefaultPluginPrefixResolver.java:139) 
at org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolveFromProject(DefaultPluginPrefixResolver.java:122) 
at org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolve(DefaultPluginPrefixResolver.java:86) 
at org.apache.maven.lifecycle.internal.MojoDescriptorCreator.findPluginForPrefix(MojoDescriptorCreator.java:262) 
at org.apache.maven.lifecycle.internal.MojoDescriptorCreator.getMojoDescriptor(MojoDescriptorCreator.java:222) 
at org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments(DefaultLifecycleTaskSegmentCalculator.java:106) 
at org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments(DefaultLifecycleTaskSegmentCalculator.java:86) 
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:98) 
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) 
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 
Caused by: java.lang.ClassNotFoundException: com.ning.http.client.AsyncHttpProvider 
at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50) 
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:244) 
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:230) 
... 32 more 

所以我想我的問題是我從哪裏出發?我試圖從谷歌或其他SO問題上找到關於這個錯誤的更多信息,但是每個人都只是一直說它,因爲它缺少一個類,這是顯而易見的,但這只是在我開始使用maven之後纔開始發生的,所以這意味着存在一個依賴我丟了?我需要包括什麼來阻止這個問題?

另外一個方面:當我通過命令行在正確的文件夾上運行mvn編譯時生成項目,當然當它運行時它聲稱存在證書問題,即使它與之前使用的完全相同的代碼我切換到maven,它工作得很好。

也如果需要的話,這裏是我爲這個項目POM:

<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>com.v2.auth</groupId> 
    <artifactId>auth</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>auth</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>logback-classic</artifactId> 
     <version>1.0.13</version> 
     <exclusions> 
     <exclusion> <!-- declare the exclusion here --> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
     </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>com.jolbox</groupId> 
     <artifactId>bonecp</artifactId> 
     <version>0.8.0.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.6</version> 
    </dependency> 
    </dependencies> 

    <build> 
    <plugins> 
    <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
      <archive> 
       <manifest> 
       <mainClass>com.v2.auth.App</mainClass> 
       </manifest> 
      </archive> 
      <descriptorRefs> 
       <descriptorRef>jar-with-dependencies</descriptorRef> 
      </descriptorRefs> 
      </configuration> 
      <executions> 
      <execution> 
       <id>make-assembly</id> <!-- this is used for inheritance merges --> 
       <phase>package</phase> <!-- bind to the packaging phase --> 
       <goals> 
       <goal>single</goal> 
       </goals> 
      </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.0</version> 
      <configuration> 
      <source>1.7</source> 
      <target>1.7</target> 
      </configuration> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

對不起,如果這僅僅是一個愚蠢的明顯的問題,但我在我束手無策我試圖弄清楚這一點對我自己。

+0

嘗試增加 \t com.ning \t 異步HTTP客戶端 \t 1.6.1

回答

1

這與您的代碼或其依賴關係無關。看看發佈的stacktrace,很明顯這是m2e功能的問題,特別是Sonatype的「async-http-client」插件。在Eclipse中重新安裝m2e。以下屏幕截圖顯示了我日食中的m2e插件。請注意列表中的第一項。

enter image description here

+0

完美謝謝!我簡直不敢相信那是全部。 – Kynian