2012-09-13 59 views
2

當我試圖通過Gradle運行Jetty並且缺少想法時,我遇到了java.lang.ClassNotFoundException: oracle.jdbc.pool.OracleConnectionPoolDataSource異常。在gradle這個點的碼頭配置到ENV文件:ClassNotFoundException使用Jetty/Gradle加載Oracle驅動程序

[jettyRun, jettyRunWar]*.jettyEnvXml = file('../resources/jetty/jetty-env.xml')

和文件中的JNDI配置:

<New id="OracleDS" class="org.mortbay.jetty.plus.naming.Resource"> 
    <Arg>java:comp/env/OracleDS</Arg> 
    <Arg> 
    <New class="oracle.jdbc.pool.OracleConnectionPoolDataSource"> 
     ... 
    </New> 
    </Arg> 
</New> 

我一直在試圖增加一個extraClasspath該文件,設置碼頭.home系統屬性,並添加依賴關係到jar(到webapp和buildscript)。我也嘗試了更簡單的OracleDataSource類。任何具體的建議都會非常有幫助。

回答

1

將庫文件作爲標準依賴項添加到web應用程序中有訣竅。

providedRuntime files("$projectDir/../lib/ojdbc14.jar")

我不幸着手下來更多的應用程序服務器的影響的方法。不幸的是,沒有任何選項提供了很多反饋,所以通過--debug輸出進行的grep顯示,該解決方案導致庫一直加載。

+0

我不認爲這是一個從根本上更好的方式(其中的方式可能是更好嗎?),但你應該使用'providedRuntime',除非你想讓驅動程序在戰爭中結束。不知道你的意思是「除了將其添加到新的配置」。 –

+0

是的,從那以後,我將它添加到新的配置中。並會相應地更新答案。更好的解決方案問題主要是「我仍在研究如何有效地使用Gradle,並且不確定這種方法是否存在問題/不正確的做法,我沒有看到」,而不是因爲我實際上有任何問題與它或尋求改善。你作爲一個值得信賴的來源解答了我的擔憂(順便說一下,我正在調教Spock和Gradle工作,並正在獲得轉換)。 –

+0

我不認爲在'配置'下嵌套'依賴關係'會給頂層上的'依賴關係'塊帶來什麼。換句話說,配置{jetty {}}'部分不起任何作用。它添加了一個新的配置,而不用做任何事情。這導致了「dependsOn」行正在做什麼的問題。 –

0

我有同樣的問題,並使用「additionalRuntimeJars」屬性解決了這個問題:

jettyRun { 
    additionalRuntimeJars = configurations.myJettyRuntime // for oracle classes 
} 
相關問題