使用Gradle构建Java库

本文指导您使用Gradle BuildInit插件生成可应用于其他JVM项目中的Java库,涵盖库构建、定制JAR文件及生成API文档的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本指南将引导您完成使用Gradle的Build Init插件生成新Java库的过程,该Java库可在其他JVM库和应用程序中使用。

你会建立什么

您将生成一个遵循Gradle约定的Java库。

你需要什么

  • 约12分钟

  • 文本编辑器或IDE

  • 一个Java开发工具包(JDK)8或更高版本

  • 一个Gradle,版本5.0或更高版本

创建一个类库项目

Gradle带有一个称为Build Init插件的内置插件。在Gradle用户手册中有记录。该插件提供了一个名为的任务init,可以生成项目。该init任务使用(也是内置的)wrapper任务来创建Gradle包装器脚本gradlew

第一步是为新项目创建一个文件夹,并将目录更改为该文件夹。

$ mkdir demo
$ cd demo

运行初始化任务

在新项目目录中,运行init任务并java-library在出现提示时选择项目类型。对于其他问题,请按Enter键以使用默认值。

$ gradle init
> Task :wrapper

Select type of project to generate:
  1: basic
  2: application
  3: library
  4: Gradle plugin
Enter selection (default: basic) [1..4] 3

Select implementation language:
  1: C++
  2: Groovy
  3: Java
  4: Kotlin
  5: Scala
  6: Swift
Enter selection (default: Java) [1..6] 3

Select build script DSL:
  1: Groovy
  2: Kotlin
Enter selection (default: Groovy) [1..2] 1

Select test framework:
  1: JUnit 4
  2: TestNG
  3: Spock
  4: JUnit Jupiter
Enter selection (default: JUnit 4) [1..4]

Project name (default: demo):

Source package (default: demo):


> Task :init
Get more help with your project: https://docs.gradle.org/5.0/userguide/java_library_plugin.html

BUILD SUCCESSFUL
2 actionable tasks: 2 executed

如果您更喜欢Kotlin DSL,则可以选择kotlin构建脚本DSL。

init任务首先运行wrapper任务,然后生成gradlewgradlew.bat包装脚本。然后,它使用以下结构创建新项目:

Groovy DSL
.
├── build.gradle
├── gradle
│   └── wrapper 
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
    ├── main
    │   └── java 
    │       └── demo
    │           └── Library.java
    └── test
        └── java 
            └── demo
                └── LibraryTest.java
  • 包装文件的生成文件夹
  • 默认Java源文件夹
  • 默认的Java测试文件夹 

现在,您已经具有一个简单的Java库项目所需的组件。

查看生成的项目文件

设置文件已被大量注释,但只有一个活动行:

生成的settings.gradle
rootProject.name = "building-java-libraries"
  • 这将分配根项目的名称。

生成的build.gradle文件也有很多注释。活动部分在此处复制(请注意依赖项的版本号可能会在Gradle的更高版本中更新):

生成的build.gradle
plugins {
    id 'java-library'
}

repositories {
    jcenter() 
}

dependencies {
    api 'org.apache.commons:commons-math3:3.6.1' 

    implementation 'com.google.guava:guava:28.0-jre' 

    testImplementation 'junit:junit:4.12' 
}
  • 公共Bintray人工仓库
  • 这是一个依赖关系的示例,该依赖关系已导出到使用者,也就是说可以在其编译类路径上找到。
  • 这是一个依赖关系的示例,该依赖关系在内部使用,并且不会在其自己的编译类路径中暴露给使用者。
  • JUnit测试库

构建脚本将添加java-library插件。这是java-base插件的扩展,并添加了用于编译Java源代码的其他任务。

文件src/main/java/demo/Library.java显示在这里:

生成的src / main / java / demo / Library.java
package demo;

public class Library {
    public boolean someLibraryMethod() {
        return true;
    }
}

生成的JUnit规范src/test/java/demo/LibraryTest.java如下所示:

生成的src / test / java / demo / LibraryTest.java
package demo;

import org.junit.Test;
import static org.junit.Assert.*;

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 build
> Task :compileJava
> Task :processResources NO-SOURCE
> Task :classes
> Task :jar
> Task :assemble
> Task :compileTestJava
> Task :processTestResources NO-SOURCE
> Task :testClasses
> Task :test
> Task :check
> Task :build

BUILD SUCCESSFUL
4 actionable tasks: 4 executed
  • 第一次运行包装程序脚本gradlew时,可能会延迟下载gradle版本并将其本地存储在〜/ .gradle / wrapper / dists文件夹中。

第一次运行构建时,Gradle将检查~/.gradle目录中缓存中是否已经具有JUnit库和其他列出的依赖项。如果没有,这些库将被下载并存储在那里。下次运行构建时,将使用缓存的版本。该build任务将编译类,运行测试并生成测试报告。

您可以通过打开位于的HTML输出文件来查看测试报告build/reports/tests/test/index.html

示例报告如下所示:

测试总结

您可以build/libs在名称为的目录中找到新打包的JAR文件demo.jar。通过运行以下命令来验证归档文件是否有效:

$ jar tf build/libs/demo.jar
META-INF/
META-INF/MANIFEST.MF
demo/
demo/Library.class

您应该看到所需的清单文件MANIFEST.MF—和已编译的Library类。

  • 由于Gradle的java-library插件假定您的项目源按常规项目布局排列,因此无需在构建脚本中进行任何其他配置即可完成所有这些操作。您可以根据用户手册的要求自定义项目布局。

恭喜,您已经完成了创建Java库的第一步!现在,您可以根据自己的项目需求对其进行自定义。

自定义库JAR

您通常会希望JAR文件的名称包含库版本。可以通过version在构建脚本中设置顶级属性来轻松实现,如下所示:

build.gradle
version = '0.1.0'

现在运行jar任务:

$ ./gradlew jar
> Task :compileJava UP-TO-DATE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :jar UP-TO-DATE

BUILD SUCCESSFUL
2 actionable tasks: 2 up-to-date

并注意生成的JAR文件build/libs/demo-0.1.0.jar包含预期的版本。

另一个常见要求是自定义清单文件,通常是通过添加一个或多个属性来进行。通过配置jar task,在清单文件中包含库名称和版本。在构建脚本的末尾添加以下内容:

build.gradle
jar {
    manifest {
        attributes('Implementation-Title': project.name,
                   'Implementation-Version': project.version)
    }
}

要确认这些更改是否按预期工作,请jar再次运行任务,这一次还要从JAR解压缩清单文件:

$ ./gradlew jar
$ jar xf build/libs/demo-0.1.0.jar META-INF/MANIFEST.MF

现在查看META-INF/MANIFEST.MF文件的内容,您应该看到以下内容:

META-INF / MANIFEST.MF
Manifest-Version: 1.0
Implementation-Title: building-java-libraries
Implementation-Version: 0.1.0
  • 了解有关配置JAR的更多信息清单只是可以在jar任务上配置的许多属性之一。有关完整列表,请参见Gradle语言参考的Jar部分以及Gradle用户手册的Jar和创建档案部分。 

现在,您可以尝试编译一些使用刚刚构建的库的Java代码来完成此练习。

添加API文档

java-library插件通过该javadoc任务内置了对Java API文档工具的支持。

由Build Init插件生成的代码已经在Library.java文件上添加了注释。修改注释以成为javadoc标记。

src / main / java / Library.java
/**
 * This java source file was generated by the Gradle 'init' task.
 */
package demo;

public class Library {
    public boolean someLibraryMethod() {
        return true;
    }
}

运行javadoc任务。

$ ./gradlew javadoc
> Task :compileJava UP-TO-DATE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :javadoc

BUILD SUCCESSFUL
2 actionable tasks: 1 executed, 1 up-to-date

您可以javadoc通过打开位于的HTML文件来查看生成的文件build/docs/javadoc/index.html

摘要

而已!您现在已经成功构建了Java库项目,将其打包为JAR,并在单独的应用程序中使用了它。在此过程中,您已经学会了如何:

  • 生成一个Java库

  • 调整生成的build.gradle样本Java文件的结构

  • 运行构建并查看测试报告

  • 自定义JAR文件的名称及其清单的内容

  • 生成API文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值