构建Java库
本指南引导您完成使用Gradle的Build Init插件生成适合其他JVM库和应用程序使用的JVM库的过程。
你会建立什么
您将使用标准布局生成Java库。
你需要什么
- 大约11分钟
- 文本编辑器或IDE
- 一个Java开发工具包(JDK),版本1.7或更高
- 一个Gradle,版本4.7或更高
创建一个库项目
Gradle带有一个名为Build Init插件的内置插件。它在Gradle用户手册中有记录。该插件有一个叫做的任务init,用于生成项目。该init任务调用(也是内置的)wrapper任务来创建一个Gradle包装脚本,gradlew。
第一步是为新项目创建一个文件夹并将目录切换到其中。
$ mkdir building-java-libraries
$ cd building-java-libraries
运行init任务
从新项目目录中,init使用java-library参数运行任务。
$ gradle init --type java-library
>任务:包装
>任务:初始化
4s制造成功
2个可执行的任务:2个执行
该init任务运行的wrapper任务首先,其产生gradlew和gradlew.bat包装脚本。然后它创建具有以下结构的新项目:
。
├──build.gradle
├──gradle
│└──wrapper 1⃣️
│├──gradle-wrapper.jar
│└──gradle-wrapper.properties
├──gradlew
├──gradlew.bat
├──settings.gradle
└──src
├──main
│└──java 2⃣️
│└──Library.java
└──test
└──java 3⃣️
└──LibraryTest.java
- 为包装文件生成文件夹
- 默认的Java源文件夹
- 默认的Java测试文件夹
您现在拥有一个简单的Java库项目所需的组件。
查看生成的项目文件
该settings.gradle文件受到严重评论,但只有一条活动行:
生成的设置
rootProject.name='building-java-libraries' 1⃣️
- 这将分配根项目的名称。
生成的build.gradle文件也有很多评论。这里重现活动部分(注意依赖关系的版本号可能会在更新版本的Gradle中更新):
plugins {
id 'java-library'
}
dependencies {
api 'org.apache.commons:commons-math3:3.6.1' 2⃣️
implementation 'com.google.guava:guava:23.0' 3⃣️
testImplementation 'junit:junit:4.12' 4⃣️
}
repositories {
jcenter() 1⃣️
}
version = '0.1.0'
jar {
manifest {
attributes('Implementation-Title': project.name,
'Implementation-Version': project.version)
}
}
- 公共Bintray Artifactory存储库
- 这是一个导出到消费者的依赖项的例子,也就是说在他们的编译类路径中找到。
- 这是一个内部使用的依赖关系的实例,并且不会在自己的编译类路径中向消费者公开。
- JUnit测试库
该build.gradle添加的Java库插件。这是该java-base插件的扩展,并添加了编译Java源代码的其他任务。
该文件src/main/java/Library.java显示在这里:
public class Library {
public boolean someLibraryMethod() {
return true;
}
}
下面显示了生成的JUnit规范src/test/java/LibraryTest.java:
import org.junit.Test;
public class LibraryTest {
@Test public void testSomeLibraryMethod() {
Library classUnderTest = new Library();
assertTrue("someLibraryMethod should return 'true'", classUnderTest.someLibraryMethod());
}
}
生成的测试类只有一个JUnit 4测试。测试实例化Library类,调用someLibraryMethod方法并检查返回的值是否为true。
组装库JAR
要构建该项目,请运行该build任务。你可以使用普通的gradle命令,但是当一个项目包含一个包装脚本时,可以使用它来代替它。
$ ./gradlew构建
>任务:compileJava
>任务:processResources NO-SOURCE
>任务:类
>任务:jar
>任务:组装
>任务:compileTestJava
>任务:processTestResources NO-SOURCE
>任务:testClasses
>任务:测试
拿起_JAVA_OPTIONS:-Xmx2048m -Xms512m
>任务:检查
>任务:构建
8s成功制造
4个可执行任务:4个执行
第一次运行包装脚本时gradlew,可能会有一个延迟,而该版本的gradle下载和本地存储在您的
~/.gradle/wrapper/dists 文件夹中。
第一次运行构建时,Gradle将检查您的~/.gradle目录下是否已在缓存中拥有JUnit库和其他列出的依赖项。如果没有,库将被下载并存储在那里。下一次运行构建时,将使用缓存版本。该build任务编译类,运行测试并生成测试报告。
您可以通过打开位于的HTML输出文件来查看测试报告 build/reports/tests/test/index.html。