我有一個多包的gradle項目。構建完成後,每個包在build/libs中生成它的jar文件。外部jar依賴被拉入〜/ .gradle。我現在想通過適當的類路徑從命令行本地運行服務。爲此,我正在編寫構建類路徑的腳本。問題是腳本不理解所有的外部依賴關係,因此不能構造類路徑。有沒有一種方法可以幫助Gradle?理想情況下,我想在構建結束時將所有依賴關係轉儲到文件夾中。如何爲Gradle項目生成類路徑?
回答
你可以嘗試這樣的事情在你的構建腳本:
// add an action to the build task that creates a startup shell script
build << {
File script = file('start.sh')
script.withPrintWriter {
it.println '#!/bin/sh'
it.println "java -cp ${getRuntimeClasspath()} com.example.Main \"\[email protected]\""
}
// make it executable
ant.chmod(file: script.absolutePath, perm: 'u+x')
}
String getRuntimeClasspath() {
sourceSets.main.runtimeClasspath.collect { it.absolutePath }.join(':')
}
首先,我會建議使用application plugin如果可以的話,因爲它注意到了這一問題了。
如果你想在classpath自己轉儲到一個文件中,最簡單的方法是一樣的東西:
task writeClasspath << {
buildDir.mkdirs()
new File(buildDir, "classpath.txt").text = configurations.runtime.asPath + "\n"
}
如果你想真正的類路徑上的所有庫複製到一個目錄,你可以這樣做:
task copyDependencies(type: Copy) {
from configurations.runtime
into new File(buildDir, "dependencies")
}
感謝您的回答。如果我使用應用程序插件,如何控制JVM設置?我想通過在命令行中傳遞的特定設置啓動JVM。如果應用程序插件可以幫助我配置它,這將是有用的。 –
我發現這個-http://www.gradle.org/docs/current/dsl/org.gradle.api.Project.html#N13953。讓我玩這個,看看我能不能做到我想要的。 –
我沒有成功地開始工作。我添加了應用程序插件並指定了主類名稱。在運行gradle運行時,我得到了class not found錯誤。此外,類和資源文件夾不會創建,因此我假設的錯誤。命令gradle運行問題是 - /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home/bin/java -Dfile.encoding = UTF-8 -cp/Users/name/gradleproject/build/classes/main :/ Users/name/gradleproject/build/resources/main MainClass –
- 1. Gradle爲本機依賴項生成錯誤的Eclipse類路徑
- 2. 如何在Gradle中添加根項目作爲類路徑
- 3. 如何添加ECJ到Liferay portlet項目的Gradle ant.importBuild類路徑?
- 4. 如何爲新項目生成(ActionSctipt)類?
- 5. 非項目路徑的Gradle副本
- 6. 執行Gradle任務的項目路徑
- 7. Gradle:有效的項目名稱/路徑?
- 8. Eclipse Gradle添加類路徑條目
- 9. 如何從Model類中的路徑生成路徑/ URL?
- 10. Rails:如何生成路徑?
- 11. 如何在Libgdx項目生成器中指定核心項目路徑?
- 12. 如何在eclipse中將項目類路徑給定製生成器?
- 13. 在gradle中獲取Android項目的類路徑
- 14. Java Web項目類路徑
- 15. Java插件類路徑gradle
- 16. 從android gradle插件生成eclipse項目
- 17. 如何將非gradle android項目轉換爲gradle項目?
- 18. Eclipse項目生成:添加一個「排除」屬性類路徑條目
- 19. 如何在maven項目中爲sqlmapconfig.xml設置類路徑
- 20. 如何從路徑選項生成的XML轉換成表格
- 21. 如何在Gradle中爲JavaExec任務設置主類路徑?
- 22. 如何在構建android gradle項目時禁用proguard生成dump.txt
- 23. 如何在Gradle項目中生成war文件
- 24. 如何讓我的Gradle項目在Eclipse中自動生成?
- 25. 由ASP.NET Bundling生成的絕對路徑 - 如何生成相對路徑?
- 26. 生成Schröder路徑
- 27. 如何爲Haskell項目生成標籤?
- 28. 如何防止子項目的類路徑包含在頂級項目的類路徑中?
- 29. 如何讓Gradle爲eclipse生成java.library.path
- 30. Buildr Manifest從EAR包生成類路徑
謝謝。那看起來很有希望我可以將它添加到build.gradle文件的任何位置嗎?另外,我想理想地將類路徑轉存到某處並讓腳本引用文件中的內容。這使我可以有一個腳本來完成一堆事情,而不需要成爲Gradle腳本的一部分。 –
我更新了問題以顯示我所嘗試的以及我看到的錯誤。 –
'sourceSets.main.runtimeClasspath'基本上是一個['FileCollection'](http://www.gradle.org/docs/current/javadoc/org/gradle/api/file/FileCollection.html),它包含File對象到1)構建輸出文件夾('build/classes/main','build/references/main'等),以及2)外部jar依賴關係到他們所在的任何存儲庫。您可以輕鬆地迭代這個集合並複製jar在一個有趣的文件夾中。 – zagyi