Java 在Gradle中创建编程API的变体

Java 在Gradle中创建编程API的变体,java,gradle,variants,Java,Gradle,Variants,我对gradle有点陌生……很久以前我创建了一个JavaAPI(现在是一个gradle项目,它构建了一个jar),其中有一些敏感部分负责解密公司数据以及一些非敏感的东西。我有一个新项目需要这个API的一部分,当然我不想把整个API给其他开发者/承包商 理想情况下,我想做的是创建两个变体(为了参数起见,让我们说“Pro”和“Lite”——我想这是一种简单的产品线方法) 是否可以使用gradle构建两个不同的罐子? 1.一个是专业的完整API 2.一个是去掉相关类的LiteAPI 我在网上看到了一些

我对gradle有点陌生……很久以前我创建了一个JavaAPI(现在是一个gradle项目,它构建了一个jar),其中有一些敏感部分负责解密公司数据以及一些非敏感的东西。我有一个新项目需要这个API的一部分,当然我不想把整个API给其他开发者/承包商

理想情况下,我想做的是创建两个变体(为了参数起见,让我们说“Pro”和“Lite”——我想这是一种简单的产品线方法)

是否可以使用gradle构建两个不同的罐子?
1.一个是专业的完整API 2.一个是去掉相关类的LiteAPI

我在网上看到了一些关于“口味”的说法,但似乎所有的热门话题都与Android开发和属性有关

更糟糕的情况是,我创建了一个只包含所需代码的新项目,但如果我向API添加新功能/错误修复,我将无法获得将它们整合到单个项目中的好处

另一种方法是将现有项目组织成不同的项目,并将安全相关的东西(I/O和模型)作为不同的jar


非常感谢任何能在这里透露一些信息的人

您可以将其拆分为具有pro和lite版本的多模块项目。构建时,您可以将pro和lite的二进制文件发布到您的工件库(nexus、artifactory等),然后您将拥有两个独立的JAR。对于通用代码,您可以使用第三个模块,该模块在2之间共享内容,lite和pro都可以依赖它。

单个Gradle项目可以生成任意数量的JAR。您可以简单地添加另一个Jar任务,并给它一个唯一的分类器,以将其与“标准”库区分开来


另外一个(可能更好)的选择是使用Great Mark,我认为这是一条路!非常感谢!谢谢你,杰夫。我正是在考虑这种方法,但我想知道是否可以在不重构东西的情况下做一些更具体的事情。似乎马克用排除选项的答案是正确的。谢谢你!但要小心,不要排除实际需要运行的类。您可能会错误地这样做,因为您在编译类文件之后排除了它们,所以这可能有点危险。在我的例子中,有一个很好的关注点分离,因此我可以从某些包中排除所有关注点,希望一切正常(API不是那么大,所以我有完整的概述)。事实上,我的“lite”变体只使用了大约10-15个类。下周我有空的时候,我打算试一试。
task jarLite(type: Jar) {
    classifier = 'lite'
    exclude '**/SomeProprietaryCode.class'
    with jar
}