2017-01-22 54 views
1

我有2個項目:Maven包括一個共享的jar編譯但不能實時工作

ProjectA和SharedProject。

我用在項目A下面的POM文件:

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

和共享項目的POM看起來是這樣的:

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

我的項目A編譯(實際上確實使用進口SharedProject)所以我得到了這個爲我。

的問題是運行後:項目A - > MVN安裝 和Tomcat上運行 我得到一個錯誤信息:這不是發現的類位於SharedProject和項目A web.xml中引用

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) 

文件。這裏是項目A的web.xml具體參考代碼:

<filter> 
    <filter-name>cors</filter-name> 
    <filter-class>com.mygroup.shared.filter.common.CorsFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>cors</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
+0

按照約定,並使用一個版本一樣但從內行點'1.0.0-SNAPSHOT'原因的版本'快照1.0.0'是釋放!這將永遠不會再檢查第二次...因此,當你第一次執行'mvn install'時,jar會被存儲到本地緩存中。第二次,但是你的項目不會被告知有什麼改變。這就是爲什麼你應該使用所謂的'SNASPHOT's' ...這意味着一個像'1.0.0-SNAPSHOT'這樣的版本....而不是... – khmarbaise

回答

0

從依賴聲明刪除範圍的標籤,一切都會好起來的。

範圍compile說要行家,這依賴只會在編譯時使用。例如,它在MapStruct中使用,它在編譯階段生成代碼,之後不需要依賴關係。

+0

範圍編譯可以省略,但不會影響結果原因範圍'編譯'是默認的... – khmarbaise

+0

從依賴聲明中刪除範圍標記沒有幫助 – Urbanleg