2013-12-19 75 views
2

關於我的知識水平的一些背景知識:我正在嘗試學習如何使用gradle構建項目。到目前爲止,我沒有太多的構建工具的經驗(幾乎沒有)。我確實瞭解這個總體思路,並且之前看到過ant和maven文件,但是從未自己寫過。到現在爲止,我只是使用其他人建立腳本或使用Eclipse配置我的構建。所以我可能在這裏完全錯誤的軌道上,如果是這樣的話,請指出我的正確方向。 另外,我可惜沒有太多手工製作罐子的經驗。如何使用gradle指定對tomcat庫的依賴關係

我有一個Eclipse項目,我想編譯成一個jar。必需的庫JAR位於我的本地文件系統上。我設法讓gradle這個利用這些通過

dependencies { 
    compile fileTree(dir:'lib', include:'*.jar') 
} 

除了我在src/main/java我的源文件,只是使用apply plugin: 'java'build.gradle文件。據我所知,試圖用gradle build來構建這個項目似乎做得很對。

但是,據我所知,該庫應該用於運行在tomcat上的Web項目,並使用由tomcat提供的一些庫。例如。我正在使用javax.servlet.http.HttpServletRequest。 該項目在Eclipse中正常工作,但在那裏我添加了tomcat庫到我的Eclipse構建路徑。當我檢查Eclipse時,我可以看到javax.servlet.http.HttpServletRequest是作爲Tomcat庫的一部分的servlet-api.jar的一部分。

現在,當我構建項目時,由於java編譯器找不到類,因爲我沒有在依賴關係中指定servlet-api.jar。我想我可以以某種方式下載它(或者學習如何將其指定爲外部依賴項,以使gradle從某個存儲庫下載它),但我不確定這是否正確。

有沒有辦法告訴gradle使用Eclipse使用的相同庫?或者其他一般的方法來告訴它所有的tomcat jar,就像我可以簡單地在Eclipse中添加完整的Tomcat庫一樣? 或者我是否真的需要某種方式來看這些罐子的另一個副本,並且必須單獨指定每個罐子?

另外,我是否需要將這些庫罐添加到我的構建結果庫罐?據我所知,我需要將我依賴的任何jar添加到生成的jar中。但是,我又讀過一些地方,有些庫是由tomcat自己提供的,所以他們必須參與任何部署的戰爭。 我很害怕,我被如何建立一個罐子 -file組合混淆的戰爭中使用 -file上部署使用gradle這個一個tomcat的,我不知道我的問題來自哪些部分。我希望有人閱讀這篇文章可以幫助我解開思路並指引我朝着正確的方向發展,或者至少告訴我如何將包含在Tomcat庫中的jar添加到我的gradle依賴項中。

回答

8

使用Gradle時,無論何時添加文件或目錄作爲依賴關係,它們都不被視爲功能完整的構件(包含組,名稱和版本),而是作爲包含類的簡單文件處理。這意味着Gradle不會對它們執行任何衝突解決方案,或者拉動傳遞性依賴關係。

對於你來說,只要開始,我建議只添加tomcat依賴項。確保它與Eclipse中的版本相同。

apply plugin: 'war' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    providedCompile 'org.apache.tomcat:tomcat-catalina:7.0.47' 
} 

此外,考慮Eclipse Integration Gradle項目作爲一個長期的解決方案。

+0

謝謝,已經讓我更進一步。我第一次嘗試應用java插件,但像你一樣指定了tomcat依賴項。這不起作用,因爲沒有war-lugin,依賴關係似乎沒有'provideCompile'屬性。但是,我不確定我是否想創建一個war文件。我只需要一個jar文件在其他web應用程序中用作庫。 Afaik,戰爭只是一個特別的罐子。那麼它是否應該在這裏建立一場戰爭並在另一個應用程序中將它用作庫? –

+0

當我使用war-plugin構建時,由於缺少其他類(這是一種改進;-)),我得到了其他錯誤。這次來自JRE系統庫的課程似乎不見了。默認情況下,不應該將JRE系統庫以某種方式包含在依賴關係中?從某個存儲庫下載它似乎是錯誤的,只是爲了使用一些在執行代碼時總是存在的類。 –

+0

@JoachimKurz你能否更新你的問題與錯誤? JRE庫應該包含在WAR中,而不是在JVM類路徑中。看起來你有一些常見的配置錯誤問題。您是否嘗試過創建新的Tomcat項目來複制該問題? – kukido