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 个项目目录:lib
、server
、client
他们有一个构建目录和另外两个目录:libs
和 tmp
在 tmp
中只有一个文件 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
我有以下项目结构:
└───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 个项目目录:lib
、server
、client
他们有一个构建目录和另外两个目录:libs
和 tmp
在 tmp
中只有一个文件 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