2017-01-22 3 views
1

Ich habe 2 Projekte:Maven mit einem gemeinsamen Glas kompiliert, aber nicht in Echtzeit

ProjectA und SharedProject.

Ich verwende die folgende POM-Datei in ProjectA:

<dependency> 
     <groupId>MyGroup</groupId> 
     <artifactId>shared</artifactId> 
     <version>SNAPSHOT-1.0.0</version>   
     <scope>compile</scope>   
    </dependency> 
<dependency> 

Und die pom des gemeinsamen Projekts sieht wie folgt aus:

<modelVersion>4.0.0</modelVersion> 
<groupId>MyGroup</groupId> 
<artifactId>shared</artifactId> 
<version>SNAPSHOT-1.0.0</version> 
<name>shared</name> 
<packaging>jar</packaging> 

Mein ProjectA compiliert (und Sie tatsächlich Einfuhren aus SharedProject) also habe ich das für mich gemacht.

Problem ist nach dem Laufen: ProjectA -> MVN installieren und läuft auf tomcat ich einen Fehler von:

SEVERE: Exception starting filter cors 
java.lang.ClassNotFoundException: com.mygroup.shared.filter.common.CorsFilter 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702) 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547) 
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:532) 
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:514) 
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:142) 
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260) 
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:107) 
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4775) 
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5452) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:724) 

Diese nicht-gefunden-Klasse im SharedProject befindet und in ProjectA web.xml verwiesen Datei. Hier ist der spezifische Referenzcode ProjectA web.xml:

+0

Befolgen Sie die Konventionen und verwenden Sie eine Version wie '1.0.0-SNAPSHOT' Ursache von Mavens Sicht die Version 'SNAPSHOT-1.0.0' ist ein Release! was wird nie ein zweites Mal überprüft ... Also das erste Mal, wenn Sie eine 'mvn installieren' das Glas wird in lokalen Cache ok .. das zweite Mal auch gespeichert, aber Ihr Projekt, das es verwendet wird nicht informiert, dass etwas geändert hat . Deshalb sollten Sie so genannte 'SNASPHOT's verwenden ... was eine Version wie' 1.0.0-SNAPSHOT' bedeutet .... stattdessen ... – khmarbaise

Antwort

0

Entfernen Sie das Bereichs-Tag aus der Abhängigkeitsdeklaration, und alles wird in Ordnung sein.

Der Bereich compile sagt zu Maven, dass diese Abhängigkeit nur zur Kompilierzeit verwendet werden würde. Zum Beispiel wird es in MapStruct verwendet, das Code bei der Kompilierungsphase generiert und danach keine Abhängigkeiten mehr benötigt.

+0

Der Scope-Compile kann weggelassen werden, hat aber keinen Einfluss auf das Ergebnis cope 'ist der Standardwert ... – khmarbaise

+0

Das Entfernen des Bereichs-Tags aus der Abhängigkeitsdeklaration hat nicht geholfen – Urbanleg

Verwandte Themen