【问题标题】:Gradle: includeFlat and sourceSets dependecy for per-platform buildsGradle:每个平台构建的 includeFlat 和 sourceSets 依赖关系
【发布时间】:2015-09-02 08:10:16
【问题描述】:

我是 Java 世界和 Gradle 的新手。我制作了一个支持多种平台(Android、Linux 和 Windows)的 JSerial 库。

为了能够选择我的目标平台,我在我的 JSerial gradle 文件中定义了一些源集:

sourceSets {
    windows {
        compileClasspath += sourceSets.main.output
        runtimeClasspath += sourceSets.main.output
    }
    linux {
        compileClasspath += sourceSets.main.output
        runtimeClasspath += sourceSets.main.output
    }
}

dependencies {
    linuxCompile 'net.java.dev.jna:jna:4.1.0'
    linuxCompile 'net.java.dev.jna:jna-platform:4.1.0'
    windowsCompile 'net.java.dev.jna:jna:4.1.0'
    windowsCompile 'net.java.dev.jna:jna-platform:4.1.0'
}

默认mainsourceSets 构建通用接口等。然后windowssourceSet 将构建windows 实现(Linux 和Android 相同)。

我创建了一个项目,它使用这个库并使用 gradle 的 includeFlat 依赖它。这是我的 gradle 文件的依赖部分:

dependencies {
    compile project(':JSerial')
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

这行得通。但我想依赖“windows”sourceSet,因为这个项目是一个windows应用程序。我尝试了以下方法:

dependencies {
    compile project(':JSerial').sourceSets.windows.output
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

但它不起作用,我有以下错误:

在 SourceSet 容器上找不到属性“windows”。

怎么了?

PS:如果有更好的方法可以在不使用 sourceSets 的情况下做我正在尝试的事情,请告诉我!

【问题讨论】:

  • 我正在尝试寻找基于project(path: ':Jserial', configuration: 'customConfig') 的解决方案,但目前不起作用。

标签: java gradle source-sets


【解决方案1】:

我终于找到了一个我认为很优雅的解决方案。我没有使用sourceSets,而是使用了多项目。这是我的项目:

Serial/
  build.gradle
  src/main/java/com.package/
    SerialPort.java
  windows/
    build.gradle
    src/main/java/com.package/
      SerialPortWindows.java

Application/
  build.gradle
  settings.gradle

在我的Applicationsettings.gradle

includeFlat 'Serial'
includeFlat 'Serial/windows'

在我的Applicationbuild.gradle

dependencies {
     project(':Serial/windows')
}

在我Serial/windowsbuild.gradle(需要SerialPort接口编译):

dependencies {
     project(':Serial')
}

然后当我构建我的应用程序时,它需要Serial/windows,而这需要Serial。我想我将能够为我的应用程序定义多个 build.gradle 文件(例如,一个用于 Linux,一个用于 Windows),它们具有不同的依赖关系。

【讨论】:

    猜你喜欢
    • 2019-04-05
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多