2015-01-08 63 views
1

我正在使用eclipse開發和測試spring mvc應用程序。我在開發過程中經常使用Run as...Run on server來測試較小的變化。我遇到了一個ClassNotFound錯誤,其解決方案似乎涉及將幾個罐移入tomcat 8lib目錄,以便它們在運行時可用。 (包含jar的類位於eclipse中的應用程序構建路徑中。)將jar移動到tomcat lib文件夾的問題是在編譯時還需要jar。當我將jar移動到$CATALINA_HOME/lib時,出現一個錯誤,指示由於jar位於我的pom.xml中而存在重複的瓶子。但如果我從我的pom.xml中刪除它,eclipse將不會編譯該應用程序。 如何將一個jar移動到$ CATALINA_HOME/lib並仍然有eclipse編譯我的應用程序?jar在運行時不可用,爲什麼不呢?

我試着設置<scope>runtime</scope><scope>provided</scope>但這些都不能解決問題。以下是我在我的pom.xml

<dependency> 
    <groupId>javax.mail</groupId> 
    <artifactId>javax.mail-api</artifactId> 
    <version>1.5.2</version> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>javax.activation</groupId> 
    <artifactId>activation</artifactId> 
    <version>1.1.1</version> 
    <scope>provided</scope> 
</dependency> 

編輯#1:

我也嘗試過移動jartomcat lib文件夾,然後添加jarbuildpatheclipse作爲外部jar這樣我就可以從pom.xml中刪除依賴關係,並且仍然有eclipse編譯該應用程序。但是,當我這樣做,eclipse給我下面的錯誤每次我嘗試Run As..Run on Server

Several ports (8080, 8009) required by Tomcat v8.0 Server at localhost are 
already in use. The server may already be running in another process, or a 
system process may be using the port. To start this server you will need to 
stop the other process or change the port number(s). 

當然,我去了tomcat bin文件夾就跑shutdown.sh,但並沒有阻止新的錯誤。

編輯#2

當我通過點擊紅色按鈕,關閉從eclipsetomcateclipse說的tomcat已經停止。但是,當我再次嘗試restart tomcat再次執行Run As..Run on Server時,出現上述EDIT#1中描述的錯誤。當我完全關閉計算機並重啓時,臨時解決此錯誤。然後,我可以再次執行Run As..Run on Server並重新創建這種情況。現在只有一個新的錯誤被拋出。我記錄了the new error in a separate posting。但是,我每次嘗試執行連續的Run As..Run on Server啓動以測試代碼中的小更改時,始終收到來自EDIT#1的錯誤消息的相同問題。 所以這個當前的問題沒有得到解決,因爲java mail jartomcat lib文件夾和使用範圍提供需要一個不可接受的重新啓動每次我想從eclipse內重新啓動應用程序。shutdown.sh也不起作用。

+0

我們可以看到堆棧跟蹤嗎? –

+0

@AlessandroSantini lemme重啓我的機器,看看我是否可以重現錯誤以獲得堆棧跟蹤。 – CodeMed

+0

知道它的日蝕,我有一種感覺,你的機器重啓可能會解決你的問題。你應該保留你的maven _provided_條目 – Angad

回答

0

好吧,我重新讀你的文章,我想我已經釘了它。要殺死該Tomcat實例,請按下Eclipse中控制檯窗口中的紅色按鈕。 shutdown.sh可能無法關閉它。

根據JAR文件,您需要它們都在Tomcat lib目錄和Maven依賴項中。如果它們是「提供的」,它們將用於編譯和測試時間,但不會被部署(這正是您期望的)。然後您需要將它們複製到tomcat/lib目錄中以避免衝突。

1
you can write lib launch file which you can run on maven install. 
Inside launchConfiguration mentioned string attribute like below 
<stringAttribute key="M2_GOALS" value="clean package install"/> 
<booleanAttribute key="M2_NON_RECURSIVE" value="false"/> 
<booleanAttribute key="M2_OFFLINE" value="false"/> 
<stringAttribute key="M2_PROFILES" value=""/> 
<listAttribute key="M2_PROPERTIES"/> 
<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/> 
<booleanAttribute key="M2_SKIP_TESTS" value="false"/> 
<intAttribute key="M2_THREADS" value="1"/> 
<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/> 
<stringAttribute key="M2_USER_SETTINGS" value=""/> 
<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/> 
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.6.0_45"/> 
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace:/Lib}"/> 

This will compile all the jar file and put it into lib folder in webapp directory 
+0

感謝您和+1分時間分享此內容。我無法驗證您的答案,因爲我目前沒有使用此技術。但是,如果其他用戶驗證了這個或其他答案,我將很樂意將答案標記爲已接受。 – CodeMed

相關問題