2016-11-23 82 views
3

我們有一組Spring應用程序組織爲微服務,幾個月後成功運行。我們使用Sprig Boot 1.3.3。Maven依賴關係上的java.lang.ClassNotFoundException

現在我們遇到了Maven構建過程切換到Spring Boot 1.4.2的問題。我們正在開發基於微服務的軟件架構。我們有core.common服務,它是通過使用依賴條件類似這樣的其他服務的引用:

<dependencies> 
    <dependency> 
     <groupId>com.group</groupId> 
     <artifactId>core.common</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <scope>compile</scope> 
    </dependency> 
</dependencies> 

此服務負責提供所需的每個其他服務常見的類和方法。

我們還可以使用單獨的服務(root.service)建立所有其他服務並把它們打包成jar文件。這是pom.xmlroot.service部分:

<parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.2.RELEASE</version> 
     <relativePath /> <!-- lookup parent from repository --> 
    </parent> 

    <modules> 
     <module>../core.adminservice</module> 
     <module>../core.locationservice</module> 
     <module>../core.reportservice</module> 
     <module>../core.userservice</module> 
     <module>../core.notificationservice</module> 
     <module>../core.trackingservice</module> 
     <module>../core.mappingservice</module> 
     <module>../core.common</module> 
    </modules> 

直到切換到春季啓動1.4.2版本中,我們能夠做mvn clean install超過root.service測試和建造的休息服務來自模塊規範。

切換到Spring Boot 1.4.2版本後,當我嘗試執行mvn clean installroot.service我得到java.lang.ClassNotFoundException。異常消息說沒有任何服務形式模塊規範找不到中的任何類core.common服務中使用的特定服務模塊。 當我嘗試運行mvn compilemvn test一切都運行良好,我成功的構建和測試。當我嘗試從eclipse運行服務時,一切都很好。

你有什麼想法嗎?請幫忙。

編輯 完整堆棧跟蹤一個用例:

Running com.blockpeek.core.adminservice.tests.services.AdminServiceTest 
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.002 sec <<< FAILURE! - in com.blockpeek.core.adminservice.tests.services.AdminServiceTest 
initializationError(com.blockpeek.core.adminservice.tests.services.AdminServiceTest) Time elapsed: 0.002 sec <<< ERROR! 
java.lang.NoClassDefFoundError: com/blockpeek/core/common/services/AbstractCRUDService 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361) 
    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) 
    at java.lang.Class.getDeclaredFields0(Native Method) 
    at java.lang.Class.privateGetDeclaredFields(Class.java:2583) 
    at java.lang.Class.getDeclaredFields(Class.java:1916) 
    at org.junit.runners.model.TestClass.getSortedDeclaredFields(TestClass.java:77) 
    at org.junit.runners.model.TestClass.scanAnnotatedMembers(TestClass.java:70) 
    at org.junit.runners.model.TestClass.<init>(TestClass.java:57) 
    at org.junit.runners.ParentRunner.createTestClass(ParentRunner.java:88) 
    at org.junit.runners.ParentRunner.<init>(ParentRunner.java:83) 
    at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:65) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:138) 
    at org.springframework.test.context.junit4.SpringRunner.<init>(SpringRunner.java:49) 
    at sun.reflect.GeneratedConstructorAccessor2.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104) 
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:283) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:173) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:128) 
    at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203) 
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103) 
Caused by: java.lang.ClassNotFoundException: com.blockpeek.core.common.services.AbstractCRUDService 
    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) 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361) 
    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) 
    at java.lang.Class.getDeclaredFields0(Native Method) 
    at java.lang.Class.privateGetDeclaredFields(Class.java:2583) 
    at java.lang.Class.getDeclaredFields(Class.java:1916) 
    at org.junit.runners.model.TestClass.getSortedDeclaredFields(TestClass.java:77) 
    at org.junit.runners.model.TestClass.scanAnnotatedMembers(TestClass.java:70) 
    at org.junit.runners.model.TestClass.<init>(TestClass.java:57) 
    at org.junit.runners.ParentRunner.createTestClass(ParentRunner.java:88) 
    at org.junit.runners.ParentRunner.<init>(ParentRunner.java:83) 
    at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:65) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:138) 
    at org.springframework.test.context.junit4.SpringRunner.<init>(SpringRunner.java:49) 
    at sun.reflect.GeneratedConstructorAccessor2.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104) 
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:283) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:173) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:128) 
    at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203) 
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103) 

Maven版本:

$ mvn -version 
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17:41:47+01:00) 
Maven home: C:\Program Files\apache-maven-3.3.9 
Java version: 1.8.0_101, vendor: Oracle Corporation 
Java home: C:\Program Files\Java\jdk1.8.0_101\jre 
Default locale: en_US, platform encoding: Cp1252 
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos" 

編輯2:這是我所得到的,如果我跑mvn -e clean install

[ERROR] -> [Help 1]                                
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.6.0:compile (def 
ult-compile) on project core.adminservice: Compilation failure                     
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)              
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)              
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)              
     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)        
     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)        
     at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)     
     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)            
     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)                  
     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)                  
     at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)                   
     at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)                    
     at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)                    
     at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)                     
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)                   
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)               
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)             
     at java.lang.reflect.Method.invoke(Method.java:498)                      
     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)             
     at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)               
     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)             
     at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)                
Caused by: org.apache.maven.plugin.compiler.CompilationFailureException: Compilation failure              
     at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:1029)           
     at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:137)               
     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)          
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)              
     ... 20 more                                
[ERROR]                                   
[ERROR] Re-run Maven using the -X switch to enable full debug logging.                   
[ERROR]                                   
[ERROR] For more information about the errors and possible solutions, please read the following articles:          
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException               
[ERROR]                                   
[ERROR] After correcting the problems, you can resume the build with the command                 
[ERROR] mvn <goals> -rf :core.adminservice 
+0

請製作[mcve]。 – Tunaki

+0

請參閱我的編輯。 –

+0

@Tunaki爲什麼你把它作爲題外話?這個問題有什麼問題?尖端技術用於軟件架構開發,最廣泛使用的開源框架用於開發。這個問題可能與Spring boot 1.4.2.RELEASE中的未知問題有關。 –

回答

0

我想這是因爲從春季啓動1.4 jar文件的strucutre所做的更改:Release Notes

可執行罐子的佈局發生了變化。如果您使用Boot的Maven,Gradle或Ant支持來構建您的應用程序,則此更改不會影響您。如果您自己構建可執行文件 ,請注意,應用程序的依賴關係現在打包在BOOT-INF/lib而不是lib中,並且應用程序自己的 類現在打包在BOOT-INF /類中,而不是根 罐子。