在 IntelliJ Java 应用程序中构建变体(产品风格)

Posted

技术标签:

【中文标题】在 IntelliJ Java 应用程序中构建变体(产品风格)【英文标题】:Build variants (product flavours) in IntelliJ Java application 【发布时间】:2016-05-30 10:11:45 【问题描述】:

是否可以在 IntelliJ 中为传统 Java 应用(不是 android 项目)基于不同源集构建变体?

我想使用 Android gradle 插件附带的 productFlavors 等功能,但用于传统的 Java 应用程序。

例子:

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

【问题讨论】:

这是一个使用 maven 的答案:***.com/questions/5162009/… 【参考方案1】:

答案是肯定的,但您必须使用正在孵化的新 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)
    

参考:https://docs.gradle.org/current/userguide/java_software.html

【讨论】:

【参考方案2】:

我们将 Gradle 多模块项目用于我们的变体系统。有一个包含通用代码的核心项目。自定义只需在子项目中完成。

subprojects 
   dependencies 
     compile project(':core')
   

变体子项目依赖于核心和每个构建单独的 .war 文件。请注意,在这种情况下,我们不会覆盖核心项目中的类。对于代码定制,我们使用 Spring,在某些情况下使用 SPI,但我想任何依赖注入框架都可以实现这一点。它只是迫使您在核心中提供明确的扩展点,我认为这是一件好事。

【讨论】:

以上是关于在 IntelliJ Java 应用程序中构建变体(产品风格)的主要内容,如果未能解决你的问题,请参考以下文章

Android studio / IntelliJ构建窗口自动显示

配置 Android 构建变体的错误重新声明类

IntelliJ IDEA中Gradle构建javaProject生成的Jar界面字母出现乱码怎么办?

IntelliJ 在 Docker 中调试 Java 应用程序

无法在 Android Studio 中切换到调试构建变体

无法在 intellij idea 中使用 gradle 构建 javafx 项目