2016-12-12 5 views
0

私はGuavaを試したかったのですが、JARファイルでライブラリを手動でインポートする簡単な方法の代わりに、Mavenを使用することにしました。私はそれをpom.xmlファイルに追加し、clean & installを実行しました。私のコードはEclipseの内部でうまく動作しているのでコンパイルするようですが、コードを実行しようとするとJava.lang.NoClassDefFoundError例外が発生します。これは私のpom.xmlファイルです。 Mavenを使用しているときJava.lang.NoClassDefFoundError

<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>TestCommonLibaries</groupId> 
    <artifactId>TestCommonLibaries</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 

    <dependencies> 
    <dependency> 
     <groupId>com.google.guava</groupId> 
     <artifactId>guava</artifactId> 
     <version>20.0</version> 
    </dependency> 
    </dependencies> 

</project> 

は、だから私は、最も一般的な問題は、それがクラスパスに指定されていないことのように見える、この上の多くをGoogleで、だから私は、実行コンフィギュレーションでそれを見て、大丈夫であるように思われます。私はまた、このように、libフォルダにjarファイルをクラスパスのpom.xmlに明示的に追加してコピーすることになっているコードが見つかりました:

<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>TestCommonLibaries</groupId> 
    <artifactId>TestCommonLibaries</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 




    <dependencies> 
    <dependency> 
     <groupId>com.google.guava</groupId> 
     <artifactId>guava</artifactId> 
     <version>20.0</version> 
    </dependency> 
    </dependencies> 

    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-jar-plugin</artifactId> 
     <configuration> 
      <archive> 
      <manifest> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>lib/</classpathPrefix> 
       <mainClass>main/java/main/Main.java</mainClass> 
      </manifest> 
      </archive> 
     </configuration> 
     </plugin> 

     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <version>2.1</version> 
     <executions> 
      <execution> 
      <id>copy-dependencies</id> 
      <phase>package</phase> 
      <goals> 
       <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${project.build.directory}/lib</outputDirectory> 
       <overWriteReleases>false</overWriteReleases> 
       <overWriteSnapshots>false</overWriteSnapshots> 
       <overWriteIfNewer>true</overWriteIfNewer> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 



    </plugins> 
    </build> 


</project> 

をしかし、それは私に同じエラーを与えます。

スタックトレース:

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/collect/Lists 
    at main.Main.main(Main.java:9) 
Caused by: java.lang.ClassNotFoundException: com.google.common.collect.Lists 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 1 more 

コード:

package main; 

import java.util.List; 

import com.google.common.collect.Lists; 

public class Main { 
    public static void main(String[] args) { 
     List<String> gList = Lists.newArrayList("foo","bar"); 

    } 

} 
+0

プロジェクト - >スプリングツール - >アップデート依存関係を右クリックしてみましたか? – XtremeBaumer

+0

はい私は持っています。私はきれいにするためのオプションも試しました。 – DoeJoe

+0

とあなたはグアバと他の何かのためにエラーがあると確信していますか? – XtremeBaumer

答えて

0

私はあなたがもう一度あなたのグアバのlibをダウンロードする必要があると思います。以前にそれを正しくダウンロードしていない可能性があります。

これを行うには、.m2フォルダ(meven local repo)のguava 20.0フォルダを削除する必要があります。

.m2レパートリーに移動し、guaveフォルダet delete 20.0フォルダを検索します。 C:\ Users {userName} .m2 \ repository \ com \ google \ guava \ guava \ 20.0

このフォルダが削除されたら、プロジェクトに移動して、 update maven dependecies "を参照してください。 Mavenはmissingsライブラリを再度ダウンロードします。

関連する問題