Gradle:每个平台构建的 includeFlat 和 sourceSets 依赖项
Gradle: includeFlat and sourceSets dependecy for per-platform builds
我是 Java 世界和 Gradle 的新手。我制作了一个 JSerial 库,它将支持多个平台(Android、Linux 和 Windows)。
为了能够选择我的目标平台,我在我的 JSerial gradle 文件中定义了一些 sourceSets:
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'
}
默认 main
sourceSets 构建公共接口等。然后 windows
sourceSet 将构建 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'
}
但是它不起作用,我有以下错误:
Could not find property 'windows' on SourceSet container.
怎么了?
PS:如果有更好的方法在不使用 sourceSets 的情况下完成我正在尝试的操作,请告诉我!
我终于找到了一个我认为很优雅的解决方案。我没有使用 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
在我的 Application
的 settings.gradle
:
includeFlat 'Serial'
includeFlat 'Serial/windows'
在我的 Application
的 build.gradle
:
dependencies {
project(':Serial/windows')
}
在我的Serial/windows
的build.gradle
中(需要SerialPort
接口编译):
dependencies {
project(':Serial')
}
然后当我构建我的应用程序时,它需要 Serial/windows
,这需要 Serial
。我想我可以为我的应用程序定义多个 build.gradle
文件(例如一个用于 Linux,一个用于 Windows),具有不同的依赖关系。
我是 Java 世界和 Gradle 的新手。我制作了一个 JSerial 库,它将支持多个平台(Android、Linux 和 Windows)。
为了能够选择我的目标平台,我在我的 JSerial gradle 文件中定义了一些 sourceSets:
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'
}
默认 main
sourceSets 构建公共接口等。然后 windows
sourceSet 将构建 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'
}
但是它不起作用,我有以下错误:
Could not find property 'windows' on SourceSet container.
怎么了?
PS:如果有更好的方法在不使用 sourceSets 的情况下完成我正在尝试的操作,请告诉我!
我终于找到了一个我认为很优雅的解决方案。我没有使用 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
在我的 Application
的 settings.gradle
:
includeFlat 'Serial'
includeFlat 'Serial/windows'
在我的 Application
的 build.gradle
:
dependencies {
project(':Serial/windows')
}
在我的Serial/windows
的build.gradle
中(需要SerialPort
接口编译):
dependencies {
project(':Serial')
}
然后当我构建我的应用程序时,它需要 Serial/windows
,这需要 Serial
。我想我可以为我的应用程序定义多个 build.gradle
文件(例如一个用于 Linux,一个用于 Windows),具有不同的依赖关系。