2017-04-02 77 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