![](/img/trans.png)
[英]use 'gradle init' to migrate maven to gradle, but it's ignoring dependencies declared in pom project of parents projects
[英]Migrate maven dependencies to gradle
我從軟件測試開始——使用 Cucumber、Java、gradle。 我嘗試通過“The Cucumber for Java Book”一書來學習這一點
但是我嘗試用 gradle 而不是 maven 來做我......但現在我有一些問題......我堅持第 149 頁。我必須給出這樣的依賴:
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>${jetty.version}</version>
</dependency>
我嘗試將其“翻譯”為 gradle
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
testCompile 'io.cucumber:cucumber-java:2.4.0'
testCompile 'io.cucumber:cucumber-junit:2.4.0'
testCompile group: 'info.cukes', name: 'cucumber-picocontainer', version: '1.2.5'
compile group: 'org.eclipse.jetty', name: 'jetty-webapp', version: '9.4.12.v20180830'
}
這是正確的嗎? 編譯組:'org.eclipse.jetty',名稱:'jetty-webapp',版本:'9.4.12.v20180830'
之后我必須運行:
mvn exec:java -Dexec.mainClass="nicebank.AtmServer"
但是我怎么能用 gradle 做到這一點呢?
我希望有一個人可以幫助我 :)
你的依賴看起來不錯。 只是一個注意事項:考慮使用implementation
不是compile
因為它可以提高性能。 在此處閱讀有關compile
棄用的信息。
您還可以將您的屬性放在gradle.properties
文件中並在構建腳本中引用它們:
gradle.properties :
jettyVersion=9.4.12.v20180830
構建.gradle :
implementation group: 'org.eclipse.jetty', name: 'jetty-webapp', version: jettyVersion
Jetty 團隊還發布了BOM : — org.eclipse.jetty:jetty-bom:9.4.12.v20180830
在你的情況下。 如果您使用相同版本的多個項目,您可以導入 BOM並完全跳過版本:
dependencies {
implementation 'org.eclipse.jetty:jetty-bom:9.4.12.v20180830'
implementation 'org.eclipse.jetty:jetty-webapp'
implementation 'org.eclipse.jetty:jetty-runner'
}
至於“exec”任務:如果您的項目中只有一個主類,例如nicebank.AtmServer
,請考慮使用 Gradle 的應用程序插件:
plugins {
id 'application'
}
mainClassName = 'nicebank.AtmServer'
這樣你就不需要手動創建“exec”任務,你將從插件中獲得一個( run
)。 作為獎勵,您將獲得兩個“分發”任務,這些任務將使用您的應用程序創建一個可供分發的存檔: distZip
和distTar
。
正如我在評論中所說的,jetty-webapp 的依賴似乎沒問題,但您應該使用implementation
而不是compile
( compile
已被棄用,請參閱Java 依賴配置):
implementation group: 'org.eclipse.jetty', name: 'jetty-webapp', version: '9.4.12.v20180830'
或者
implementation "org.eclipse.jetty:jetty-webapp:9.4.12.v20180830"
對於 Gradle 中的“maven exec:java”等價物,您可以使用Gradle JavaExec 任務類型:嘗試在您的構建中定義一個任務,如下所示:
task runApp(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
main = 'nicebank.AtmServer'
}
(未測試,您可能必須對其進行調整),並使用
gradle runApp
您也可以使用Gretty插件來運行您的 web 應用程序(在這種情況下無需定義您自己的 JavaExec 任務),如此處和此處所述:
plugins{
// your existing plugins
id "org.gretty" version "2.2.0"
}
然后,您可以使用以下命令運行應用程序:
gradle appRun
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.