相当于非Android Gradle中的产品口味?
我正在创建一个桌面Java应用程序,并希望创建两个版本:免费和付费。区别主要在于包含了哪些资源文件(将来可能还涉及不同的代码,但不是现在) 我读过关于通过“产品口味”来允许这类事情的书。然而,这似乎是android插件独有的功能,桌面上显然没有该插件 是否有一款与这些产品风格相当的产品不依赖于相当于非Android Gradle中的产品口味?,gradle,android-gradle-plugin,android-productflavors,Gradle,Android Gradle Plugin,Android Productflavors,我正在创建一个桌面Java应用程序,并希望创建两个版本:免费和付费。区别主要在于包含了哪些资源文件(将来可能还涉及不同的代码,但不是现在) 我读过关于通过“产品口味”来允许这类事情的书。然而,这似乎是android插件独有的功能,桌面上显然没有该插件 是否有一款与这些产品风格相当的产品不依赖于android插件 如果有帮助的话,我的最终目标是找到一种方法,我可以运行Gradlebuild任务并输出两个不同版本的应用程序,这是我对Android构建变体的理解。确保您可以使用sourceset和自定
android
插件
如果有帮助的话,我的最终目标是找到一种方法,我可以运行Gradle
build
任务并输出两个不同版本的应用程序,这是我对Android构建变体的理解。确保您可以使用sourceset
和自定义Jar
任务来实现相同的效果
group 'com.jbirdvegas.example'
version '1.0-SNAPSHOT'
repositories {
jcenter()
}
// adding the java plugin add the `jar` task to the build task graph
apply plugin: 'java'
compileJava {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
/**
* SourceSets allows different builds to have their own
* code. If main and flavorOne contain com.foo.Bar then
* the `flavorOne` jar will contain the file specified by
* the `flavorOne` source set files.
*/
sourceSets {
main {
// you could also do per sourceSet resources if needed
java.srcDir 'src/main/java'
}
flavorOne {
java.srcDir 'src/flavorOne/java'
}
flavorTwo {
java.srcDir 'src/flavorTwo/java'
}
}
/**
* Creates the first flavor's jar when the Java plugin's `Jar`
* task is called. Since the `jar` task depends on `flavorOne` task
* this task will run before the generic `jar` task which produces
* the base .jar artifact.
*/
task flavorOne(type: Jar) {
from sourceSets.flavorOne.output
classifier = 'flavorOneJar'
manifest {
attributes "Main-Class": "de.jeha.photo.mosaic.cli.Main"
}
}
/**
* Creates the second flavor's jar when the Java plugin's `Jar`
* task is called. `flavorTwo` can run before `flavorOne` because
* both must just run before the `jar` task (base artifact)
*/
task flavorTwo(type: Jar) {
from sourceSets.flavorTwo.output
classifier = 'flavorTwoJar'
manifest {
attributes "Main-Class": "de.jeha.photo.mosaic.cli.Main"
}
}
// be sure to build all flavors whenever the `jar` task runs
jar.dependsOn flavorOne, flavorTwo
dependencies {
// you can declare different dependencies per sourceSets
flavorOneCompile 'com.google.code.gson:gson:2.5'
flavorTwoCompile 'com.something:else:1.0'
compile 'commons-io:commons-io:2.4'
testCompile group: 'junit', name: 'junit', version: '4.11'
}
/**
* if you want to have specific control over the main jar's
* build then you could configure the main jar as needed.
* This is the equivalent of the `flavorBlah` tasks except
* this task was added for us by the `java` plugin. Changes
* here will only affect the main jar built from `sourceSet.main`
*
* Think of this as the default where other `productFlavors` are
* completely divorced from this jar's configuration.
*/
jar {
manifest {
attributes "Main-Class": "de.jeha.photo.mosaic.cli.Main"
}
}
然后我们可以看到不同的构建。我们的风格和main
源代码集jar
$ ls -l build/libs/
-rw-r--r-- 1 jbirdvegas 63209268 1.3K Jan 6 08:58 my-sweet-jar-1.0-SNAPSHOT-flavorOneJar.jar
-rw-r--r-- 1 jbirdvegas 63209268 302B Jan 6 08:58 my-sweet-jar-1.0-SNAPSHOT-flavorTwoJar.jar
-rw-r--r-- 1 jbirdvegas 63209268 18K Jan 6 08:58 my-sweet-jar-1.0-SNAPSHOT.jar
添加了更多注释并添加了一个jar闭包,以展示如何将配置应用于主jar。这是
flavorBlah
任务的等效方法。我可以进一步解释任何部分,这会有帮助的谢谢,我很感激!我会等一等,看看是否还有其他答案。谢谢。还有一个问题:如何选择某种口味并获得IntelliJ IDEA支持?我的意思是,我希望autocompletion能够使用我通过volumxCompile
@Miha_x64包含的库,您可能可以执行类似configurations.compile.extendsFrom-volumex
@JBirdVegas我得到的是“无法找到参数[task]:someFlavor]的方法extendsFrom()”关于配置:org.gradle.api.internal.artifacts.configurations.DefaultConfiguration类型的“compile”