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

标签 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 我的 jar 中不需要 lombok

最佳答案

您所要求的内容被称为 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插件可以为您完成大部分工作。

关于java - 在 gradle 中定义不打包的编译依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37967185/

相关文章:

java - Java 类链接解析步骤或初始化是否会导致加载其他解析的类?

java - 如何管理具有一个 Activity 和多个 fragment 的Android应用程序?

android - doLast gradle任务未运行

spring - 运行Spring Boot Simple App时找不到Oracle驱动程序

android - 添加google-services后出现多个dex错误

java - 如何知道 2 位是否可以进行 xor java

java - URLConnection.getHeaderFields() 返回 Map<String,List<String>> 的意义是什么

java - 使用java.io.package/如何从变量读取数据并将其存储在文件中?

android - “com.layer.atlas:layer-atlas”有什么问题?

gradle - 使用 gradle 进行依赖管理