将Maven依赖项迁移到Gradle

时间:2018-11-13 13:39:41

标签: java maven gradle cucumber

我从软件测试开始-使用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做到这一点?

我希望有人可以帮助我:)

2 个答案:

答案 0 :(得分:1)

您的依存关系看起来不错。只需注意一点:考虑使用implementation而不是compile,因为它可以提高性能。了解有关compile弃用here的信息。

您还可以将属性放入gradle.properties文件中,并在构建脚本中引用它们:

gradle.properties

jettyVersion=9.4.12.v20180830

build.gradle

implementation group: 'org.eclipse.jetty', name: 'jetty-webapp', version: jettyVersion

码头团队还发布了BOMs:— org.eclipse.jetty:jetty-bom:9.4.12.v20180830。如果您使用同一版本的多个项目,则可以import the 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的Application Plugin

plugins {
    id 'application'
}

mainClassName = 'nicebank.AtmServer'

这样,您无需手动创建“ exec”任务,您将从插件中获得一个(run)。作为奖励,您将获得两个“分发”任务,这些任务将使用您的应用创建随时可分发的存档:distZipdistTar

答案 1 :(得分:0)

正如我在评论中所说,对jetty-webapp的依赖关系似乎不错,但您应该使用implementation而不是compilecompile已过时,请参阅Java dependency configurations ):

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 type:尝试在构建中定义任务,如下所示:

task runApp(type: JavaExec) {
    classpath = sourceSets.main.runtimeClasspath

    main = 'nicebank.AtmServer'

}

(未经测试,您必须适应它),然后使用

运行
gradle runApp

您也可以使用 Gretty 插件来运行您的Web应用程序(在这种情况下,无需定义自己的JavaExec任务),如herehere所述:

plugins{
    // your existing plugins   
    id "org.gretty" version "2.2.0"
}

然后可以使用以下命令运行该应用程序:

gradle appRun