gradle 子项目中生成的 jar 为空

gradle generated jars in subprojects are empty

我有以下项目结构:

└───src
    └───main
        └───java
            ├───client
            ├───lib
            └───server

我想用 gradle 生成 2 个 jar 存档。 server 的一个 jar 存档和 client 的一个 jar 存档。这两个项目都依赖于 lib.

我的 settings.gradle 看起来像这样:

include 'client', 'lib', 'server'
rootProject.name = 'rmi-tutorial'

我的 build.gradle 看起来像这样:

subprojects {
    apply plugin: 'java'
    apply plugin: 'application'


    repositories {
        mavenCentral()
    }

    dependencies {
        testCompile 'junit:junit:4.12'
    }
}

src/main/java/client/build.gradle 中的 build.gradle 文件如下所示:

dependencies {
    compile project(':lib')
}


mainClassName = 'client.ComputePi'

jar {
  manifest {
    attributes(
      'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
      'Main-Class': 'client.ComputePi'
    )
  }
}

/src/main/java/server/ 中的 build.gradle 文件如下所示:

dependencies {
    compile project(':lib')
}


mainClassName = 'server.ClientEngine'

jar {
  manifest {
    attributes(
      'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
      'Main-Class': 'server.ComputeEngine'
    )
  }
}

/src/main/java/lib中没有build.gradle

当我 运行 任务 jar 我得到以下输出:

Working Directory: C:\Users\cre13\workspace\rmi-tutorial
Gradle User Home: C:\Users\cre13\.gradle
Gradle Distribution: Gradle wrapper from target build
Gradle Version: 3.0
Java Home: C:\Program Files\Java\jdk1.8.0_101
JVM Arguments: None
Program Arguments: None
Gradle Tasks: jar

:client:compileJava UP-TO-DATE
:client:processResources UP-TO-DATE
:client:classes UP-TO-DATE
:client:jar
:lib:compileJava UP-TO-DATE
:lib:processResources UP-TO-DATE
:lib:classes UP-TO-DATE
:lib:jar
:server:compileJava UP-TO-DATE
:server:processResources UP-TO-DATE
:server:classes UP-TO-DATE
:server:jar

BUILD SUCCESSFUL

Total time: 0.107 secs

在此构建过程之后,我有一个包含所有 class 文件和 build.gradle 文件的 bin 目录,并且我有 3 个项目目录:libserverclient 他们有一个构建目录和另外两个目录:libstmptmp 中只有一个文件 jar/MANIFEST.MF 看起来像这样:

Manifest-Version: 1.0

lib- 目录中有一个 1KB 大的 jar 存档。当我提取 jar 存档时,里面只有来自 tmp.

MANIFEST.MF 文件

当我调用 gradle 任务时 projects 我得到以下结构:

Root project 'rmi-tutorial'
+--- Project ':client'
+--- Project ':lib'
\--- Project ':server'

To see a list of the tasks of a project, run gradle <project-path>:tasks
For example, try running gradle :client:tasks

BUILD SUCCESSFUL

Total time: 0.055 secs

您应该使用不同的项目结构:

  • lib
    • src/main/java
    • build.gradle
  • server
    • src/main/java
    • build.gradle
  • client
    • src/main/java
    • build.gradle
  • build.gradle
  • settings.gradle