使用任务进行Gradle绑定依赖关系配置

时间:2016-10-21 11:48:20

标签: java gradle dependency-management


我对Gradle来说是全新的。首先,我试图为简单的控制台Java应用程序创建一个构建脚本,而不使用java插件。我的代码中只有两个来自maven存储库的依赖项。 因此,我的构建包含一个任务,它扩展了JavaCompile,我在其中指定了classpath,destination,ect。
我的项目不适用java插件,因此我需要自己创建依赖配置,如下所示:

    configurations {
      myCompile {
      desciprtion = 'my own compile dependency configuration'
      transitive = true
      }
 }

然后我可以绑定此配置的依赖项:

dependencies {
myCompile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.7'
myCompile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.7'
}

据我所知,之后我必须将这些配置与我的编译操作绑定,但我无法弄清楚如何。有人能指出这个吗? 任何帮助将非常感谢)

附:我已经阅读了这个In Gradle, associating task with a dependency configuration,并且提到了源集。那么,我可以创建sourceset myThing,并为我创建配置任务吗?如果没有java插件,这会工作吗?
P.P.S.我想在没有插件的情况下完成这个简单的任务只是为了学习Gradle,它是基本的工具:)

2 个答案:

答案 0 :(得分:0)

首先使用exec任务类型创建编译任务,请参阅DSL refreence for Exec

创建编译任务时,可以使用getAsPath()获取对配置的引用,请参阅API doc for FileCollection

configurations.myCompile.getAsPath()

但严重的是,我建议您为此应用java插件。

如果您觉得需要快速入门课程,请尝试this video

答案 1 :(得分:0)

最终,我使用此代码编译没有java插件的项目:

task resolveCompileDependency(type: Copy) {
    //download libraries specified in dependency configuration
    def lib_files = configurations.myCompile.resolve()
    //print names of downloaded files and copy to build directory (optional)
    lib_files.each {File file ->
        println file.name
    }
    from lib_files
    into 'build/classes'
    outputs.files(lib_files)
}

编译任务只是普通的JavaCompile任务,它依赖于resolveCompileDependency。希望这会对某人有所帮助。