在gradle中定义不打包的编译依赖项

时间:2016-06-22 11:48:36

标签: java gradle

我试图配置gradle使用lombok来编译我的项目,但我不希望这些类出现在我的jar中。另一方面,我需要jar中的mysql-connector依赖包,但编译时不需要它。这是我的build.gradle文件:

group 'de.albritter'
version '1.0-SNAPSHOT'

apply plugin: 'java'
    jar {
    manifest {
        attributes 'Main-Class': 'de.albritter.main.Main'
    }
    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

sourceCompatibility = 1.7
repositories {
    mavenCentral()
}
dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
    compile group: 'org.projectlombok', name: 'lombok', version: '1.16.8'
    compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.39'

}

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath group: 'mysql', name: 'mysql-connector-java', version: '5.1.39'
        classpath group: 'org.projectlombok', name: 'lombok', version: '1.16.8'
    }
}

我已经看到使用compileOnly的一些解决方案,但如果我尝试使用它,我只是发出一个错误,即此方法未知。 我的gradle版本是2.9

如何告诉gradle我的罐子里不需要lombok

1 个答案:

答案 0 :(得分:1)

您要求的内容被称为compileOnly或在maven世界,provided依赖。 compileOnly配置为introduced in gradle in version 2.12。我强烈建议您使用最新版本的gradle(在编写本文时为2.14)。

如果您需要坚持使用旧版本,可以通过查找" gradle提供的依赖关系"来找到一些解决方法。一种方法是声明自己的配置,让我们调用它并将其依赖项添加到编译时类路径中。所以在你的build.gradle中:

configurations{
    provided
}

sourceSets {
    main.compileClasspath += configurations.provided
    test.compileClasspath += configurations.provided
    test.runtimeClasspath += configurations.provided
}

dependencies {
    ...
    provided 'group:module:version'
    ...
}

或者您可以使用prodeps插件,它可以为您完成大部分工作。