IntelliJ Java应用程序中的构建变体(产品风格)
对于IntelliJ中的传统Java应用程序(而不是Android项目),是否可能有基于不同源代码集的构建变体 我想使用Android gradle插件附带的productFlavors之类的功能,但用于传统的Java应用程序 例如:IntelliJ Java应用程序中的构建变体(产品风格),java,intellij-idea,gradle,build.gradle,Java,Intellij Idea,Gradle,Build.gradle,对于IntelliJ中的传统Java应用程序(而不是Android项目),是否可能有基于不同源代码集的构建变体 我想使用Android gradle插件附带的productFlavors之类的功能,但用于传统的Java应用程序 例如: library_red -- HelloImpl.java library_blue -- HelloImpl.java library_common -- Hello.java compiled library_blue -- Hello.class, Hel
library_red -- HelloImpl.java
library_blue -- HelloImpl.java
library_common -- Hello.java
compiled library_blue -- Hello.class, HelloImpl.class
compiled library_red -- Hello.class, HelloImpl.class
答案是肯定的,但你将不得不使用新的Gradle软件模型,这是非常孵化。这将是一条充满痛苦的道路,正如我在C/Cpp项目中学习到的那样,你将是一名开拓者。以下是您的构建的大致外观
plugins {
id 'jvm-component'
id 'java-lang'
}
model {
buildTypes {
debug
release
}
flavors {
free
paid
}
components {
server(JvmLibrarySpec) {
sources {
java {
if (flavor == flavors.paid) {
// do something to your sources
}
if (builtType == buildTypes.debug) {
// do something for debuging
}
dependencies {
library 'core'
}
}
}
}
core(JvmLibrarySpec) {
dependencies {
library 'commons'
}
}
commons(JvmLibrarySpec) {
api {
dependencies {
library 'collections'
}
}
}
collections(JvmLibrarySpec)
}
}
参考资料:我们的变型系统使用Gradle多模块项目。有一个包含公共代码的核心项目。自定义只需在子项目中完成
subprojects {
dependencies {
compile project(':core')
}
}
变体子项目取决于核心和每个构建单独的.war文件。注意,在这种情况下,我们不会覆盖核心项目中的类。对于代码定制,我们使用Spring,在某些情况下使用SPI,但我想任何依赖注入框架都可以实现这一点。它只是迫使您在核心中提供显式的扩展点,我认为这是一件好事