Java Gradle:没有多个项目的多个JAR

Java Gradle:没有多个项目的多个JAR,java,gradle,Java,Gradle,我有一个库,用于使用Gradle构建许多CLI工具。每个CLI工具都是一个单独的JAR。目前,每个工具都需要一个单独的Gradle项目,以及一组相关的目录,如下所示: 拥有所有这些结构会导致整个工具集合变得非常笨拙,难以使用。有没有办法将所有不同的Mains收集到一个文件夹中(适当地重命名),并配置Gradle将每个文件夹变成一个单独的JAR FWIW,jar当前是使用创建的。罐子大小不重要 提前感谢。JAR只是包含META-INF文件夹的zip文件。使用Zip任务创建它们,并使用depend

我有一个库,用于使用Gradle构建许多CLI工具。每个CLI工具都是一个单独的JAR。目前,每个工具都需要一个单独的Gradle项目,以及一组相关的目录,如下所示:

拥有所有这些结构会导致整个工具集合变得非常笨拙,难以使用。有没有办法将所有不同的
Main
s收集到一个文件夹中(适当地重命名),并配置Gradle将每个文件夹变成一个单独的JAR

FWIW,jar当前是使用创建的。罐子大小不重要


提前感谢。

JAR只是包含
META-INF
文件夹的zip文件。使用
Zip
任务创建它们,并使用
dependsOn
作为构建序列的一部分运行任务

我有如下更改jar文件的代码:

task changeJar (type: Zip) {
    baseName project.name
    extension 'jar'
    destinationDir new File('build')
    entryCompression ZipEntryCompression.STORED
    from { zipTree(new File(core.libsDir, core.name + '.jar')) }
    from ( <somewhere else> ) {
        exclude 'META-INF/'
    }
}
task changeJar(类型:Zip){
baseName项目名称
扩展名“jar”
destinationDir新文件('build')
entryCompression ZipEntryCompression.storage
来自{zipTree(新文件(core.libsDir,core.name+'.jar'))}
从(){
排除“META-INF/”
}
}

我不确定它是否合适,但您可能对我的插件感兴趣

例如:

目录

  • src/main/java,src/test/java,src/main/resources,src/test/resources-通用代码和测试
  • src/tool1/java,src/testTool1/java,src/tool1/resources,src/testTool1/resources-tool1-only源代码
  • src/tool2/java,src/testTool2/java,src/tool2/resources,src/testTool2/resources-tool2-only源代码
罐子

  • projectName.jar
  • projectName-tool1.jar
  • projectName-tool2.jar

您可以在build.gradle中定义几个jar任务,并使您的主jar任务依赖于它,这样,无论何时调用jar任务,gradle都将执行其他任务。这看起来可能会带来一个解决方案。谢谢。我放了一条评论作为提示,因为我没有时间发布完整的答案。如果对你有帮助,我很高兴。
apply plugin: 'com.lazan.javaflavours'
javaFlavours {
    flavour 'tool1'
    flavour 'tool2'
}
dependencies {
    compile      'a:a:1.0' // common to all tools
    compileTool1 'b:b:2.0' // compile deps for tool1 only
    runtimeTool2 'c:c:2.0' // runtime deps for tool2 only
}