2017-04-02 154 views
1

我試圖使用由Google提供的DI機制,但是當我跑我的申請,我收到以下錯誤/模塊:java.lang.NoClassDefFoundError:COM /谷歌/注射使用吉斯

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/inject/Module 
at challenge.App.main(App.java:19) 
Caused by: java.lang.ClassNotFoundException: com.google.inject.Module 
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 

pom.xml文件看起來像:

<build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <configuration> 
      <source>1.6</source> 
      <target>1.6</target> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.google.inject</groupId> 
     <artifactId>guice</artifactId> 
     <version>4.1.0</version> 
     <classifier>no_aop</classifier> 
    </dependency> 
    </dependencies> 

和代碼在那裏我使用它看起來像:

Injector injector = Guice.createInjector(new DependenciesModule()); 
    IndexerController indexer = injector.getInstance(IndexerController.class); 

我已經導入com.google.inject.Guice和com.google.inject.Injector

我一直在檢查幾個地方,但我看不到任何相關的解決方案,對於這個問題,我會很感激很多任何膠水。

+0

我認爲你可以刪除 no_aop。它是爲版本3,而不是4. –

+0

嗨@JunbangHuang感謝您的回答,我已經嘗試過您的意見後,仍然失敗 – Miguel

回答

2

這看起來像Maven在運行時的常見問題,依賴類(例如Guice類)不可用於JVM。

最簡單的解決方法是在運行你的應用程序使用顯式的classpath規範

java -cp 
/path/to/guice.jar: 
/path/too/your-app.jar: 
/path/to/other/classes/not/bundled/in/your-app.jar 
main.MyClass 

(這是所有在一行,分裂更好的視覺效果)。

另一個解決方案是使用Maven Shade Plugin這有利於可執行的JAR,你可以簡單地運行作爲java -jar uber.jar的創建。

+0

謝謝!,實際上使用maven創建包和下載依賴後 – Miguel