Java 服务端架构
Spring、Netty、日志框架与工程化实战
🎨 视觉封面《Gradle user guide》翻译 — 7.2 一个基本的Java项目
7.2 一个基本的Java项目
我们来看一个简单的例子。把下面的代码加入你的构建文件,以使用Java插件:
例子 7.1 使用Java插件
build.gradle
apply plugin: 'java'
注意:该样例的代码可在Gradle的安装包中的samples/java/quickstart路径下找到。
这就是你定义一个Java项目所需要做的一切。这就会在你项目里使用Java插件,该插件会给你的项目增加很多任务。
Gradle期望在src/main/java路径下找到你项目的源代码,并且测试在src/test/java路径下的代码。同时,在src/main/resources路径下的文件也会作为资源文件包含在JAR包中,并且src/test/resources下的所有文件会包含在classpath下以运行测试程序。所有的输出文件都生成在build目录下,JAR包生成在build/libs目录下。
7.2.1 编译项目
Java插件给你的项目构建增加很多任务。然而,只有屈指可数的任务你将会在构建项目的时候用到。最常用的任务是build任务,该任务会对项目执行完整的编译。当你运行gradle build的时候,Gradle会编译并测试你的代码,然后生成一个包含类和资源文件的JAR包。
例7.2 构建Java项目
gradle build输出
> gradle build
:compileJava
:processResources
:classes
:jar
:assemble
:compileTestJava
:processTestResources
:testClasses
:test
:check
:build
BUILD SUCCESSFUL
Total time: 1 secs
其他一些有用的任务是:
clean
清空build编译目录,删除所有构建文件。
assemble
编译并给你的代码打包,但是不执行单元测试。其他的插件为本任务增加更多的特性支持。例如,如果你使用War插件,那么该任务也会给你的项目编译出War包。
check
编译并测试代码。其他的插件会对该任务提供更多检测支持。例如,如果你使用Code-quality插件,那么该任务会同时对你的代码执行Checkstyle检测。
7.2.2 外部依赖
通常,一个Java项目会依赖一些外部的JAR文件。为了在项目中引用这些JAR文件,你需要告诉Gradle哪里可以找到它们。在Gradle里,JAR包等资源放在资源库(repository)中。资源库可以用来查找项目的依赖,也可以用于发布项目归档。在这个样例中,我们将使用公共的Maven库:
样例7.3 添加Maven库
repositories {
mavenCentral()
}
我们来添加一些依赖。这里,我们会声明我们产品的类有在编译期依赖于commons collections,同时我们的测试类在编译期依赖于junit:
样例7.4 添加依赖
dependencies {
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
testCompile group: 'junit', name: 'junit', version: '4.+'
}
更多的内容,可在第八章的依赖管理基础中找到。
7.2.3 自定义项目
Java插件给你的项目添加了许多属性。这些属性都有默认值,并且通常情况下这些默认值足以满足使用。如果这些值不满足要求,那么修改起来也是很容易的。我们来看一下例子。这里,我们将指定Java项目的版本号,同时指定我们编写代码所使用的Java版本。我们也会在JAR包的描述清单中(manifest)增加一些属性。
样例7.5 自定义MANIFEST.MF
sourceCompatibility = 1.5
version = '1.0'
jar {
manifest {
attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': versi
} }
|
什么属性是可用的?
你可以使用gradle properties命令去列出项目的属性。这可以让你看到Java插件添加的属性及其默认值。
|
Java插件添加的也是规则的任务,如果把它们声明在构建文件里也是完全一样的。这就意味这,你可以使用任何之前章节中介绍的机制去自定义这些任务。例如,你可以设置任务的属性,给任务增加行为,修改任务的依赖,或是完全的替代任务。在我们的样例中,我们将要配置test任务,该任务的类型是Test,当测试执行的时候增加一个系统属性:
样例7.6 增加一个测试系统属性
test {
systemProperties 'property': 'value'
}
7.2.4 发布JAR包