2016-11-23 7 views
3

Wir haben eine Reihe von Spring-Boot-Anwendungen, die als Microservices organisiert sind und einige Monate erfolgreich ausgeführt werden. Wir haben Sprig Boot 1.3.3 verwendet.java.lang.ClassNotFoundException zu Maven-Abhängigkeiten

Jetzt haben wir ein Problem mit Maven Build-Prozess zu Spring Boot 1.4.2 wechseln. Wir entwickeln Microservice-basierte Software-Architektur. Wir haben core.common Dienst, der von anderen Diensten verwiesen wird dependecies wie folgt aus:

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

Dieser Service ist verantwortlich für die gemeinsame Klassen und zu jeder anderen Diensten benötigt Methoden.

Wir verwenden auch separaten Service (root.service) alle anderen Dienste zu bauen und sie in jar Dateien zu verpacken. Dies ist der Teil von pom.xml von diesem root.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> 

Bis geschaltet Frühling Boot-Version 1.4.2 konnten wir mvn clean install über root.service zu testen und bauen den Rest der tun Dienstleistungen von Module Spezifikation.

Nach Spring-Boot-Version 1.4.2 wechseln, wenn ich versuche, mvn clean install in root.service ich java.lang.ClassNotFoundException bin immer auszuführen. Ausnahmebedingungsnachricht besagt, dass keine der Dienste Module Spezifikation keine Klassen von core.common Service in bestimmten Service von Module finden kann. Wenn ich versuche, mvn compile oder mvn test laufen alles läuft gut und ich bekomme erfolgreiche Builds und Tests. Wenn ich versuche, Dienste von Eclipse zu betreiben, ist auch alles in Ordnung.

Haben Sie irgendwelche Ideen? Bitte helfen Sie.

EDIT Voll Stack-Trace für einen Anwendungsfall:

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 Version:

$ 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" 

EDIT 2: Das ist, was ich bekomme, wenn ich mvn -e clean install laufen:

[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

Bitte machen Sie einen [mcve]. – Tunaki

+0

Siehe meine Bearbeitung bitte. –

+0

@Tunaki Warum stellst du es als Off-Topic ein? Was ist das Problem mit der Frage? Die Spitzentechnologie wird für die Softwarearchitekturentwicklung verwendet, und das am weitesten verbreitete Open-Source-Framework wird für die Entwicklung verwendet. Diese Frage steht möglicherweise im Zusammenhang mit unbekannten Problemen in Spring Boot 1.4.2.RELEASE. –

Antwort

0

Ich denke, dass aufgrund der Änderungen ist in strucutre der JAR-Datei von Spring-Boot 1.4 gemacht: Release Notes

Das Layout von ausführbaren Gläser hat sich geändert. Wenn Sie Spring Boot's Maven-, Gradle- oder Ant-Unterstützung verwenden, um Ihre Anwendung zu erstellen, hat diese Änderung keine Auswirkungen auf Sie.Wenn Sie selbst ein ausführbares Archiv erstellen, beachten Sie bitte, dass die Abhängigkeiten einer Anwendung nun in BOOT-INF/lib statt lib enthalten sind und die eigenen Klassen der Anwendung nun in BOOT-INF/classes verpackt sind und nicht im root von das Glas.

Verwandte Themen