【问题标题】:Migrate maven dependencies to gradle将 maven 依赖项迁移到 gradle
【发布时间】:2019-04-16 08:43:24
【问题描述】:

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

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

【问题讨论】:

  • jetty-webapp 的依赖项看起来不错(但如果您使用最新版本的 Gradle,则应将 compile 替换为 implementation)。要运行应用程序,您可以使用 Gradle Java 插件中的 JavaExec 任务,请参阅 docs.gradle.org/current/dsl/org.gradle.api.tasks.JavaExec.html
  • 感谢您的快速评论 :) 但我真的不知道如何为我的项目配置 JaceExec 任务:(

标签: java maven gradle cucumber


【解决方案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

Jetty 团队还发布了 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

【讨论】:

    【解决方案2】:

    正如我在评论中所说,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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 2016-12-08
      • 2020-01-20
      相关资源
      最近更新 更多