在多项目gradle设置中引用子项目的主类

时间:2019-04-19 06:12:48

标签: java gradle

我正在进行多项目gradle设置,其结构如下:

pipeline-jobs               // root folder
|-gradle.properties
|-settings.gradle
|-build.gradle
|
|-partition-by-users        // sub-project
  |-com.client.dataPipelineJobs.partitionByUsers
    |-PartitionByUsers.java // has the main() method
  |-build.gradle

pipeline-jobs 是项目的根目录,现在我只有一个子项目按用户分区。将来会添加更多子项目。我想为所有这些子项目构建可运行的jar。我的按用户分区子项目下的 build.gradle 文件如下所示:

jar {
  zip64 = true
  manifest {
    attributes('Main-Class': 'com.client.dataPipelineJobs.partitionByUsers.PartitionByUsers')
  }
  from {
    configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
  }
}

现在如果我执行gradle jar命令然后运行jar文件,则从根项目目录开始,它将引发以下错误:

  

找不到或加载主类   com.client.dataPipelineJobs.partitionByUsers.PartitionByUsers

我无法找出背后的根本原因。我在这里想念什么?我尝试使用attributes('Main-Class': partition-by-users.com.client.dataPipelineJobs.partitionByUsers.PartitionByUsers)更改清单,但这无济于事。

更新: 我认为构建胖罐存在一些问题。构建没有依赖项的jar可以解决问题,但是也许我发现了另一种准备胖jar的方法。

1 个答案:

答案 0 :(得分:0)

我在this SO线程中找到了答案。无论谁进入此页面,请查看上一个链接中@blootsvoets提供的答案。

基本思想是在jar和fatJar任务中使用相同的清单。