原文标题:Consuming JVM Libraries
原文链接:https://guides.gradle.org/consuming-jvm-libraries/
分类:Gradle Guides
翻译:机器翻译 + 人工调整
目录
内容:如何创建使用外部库的 Java 应用程序。
一、要构建的程序
- 使用标准布局生成Java应用程序。
- 向应用程序添加第三方库,构建、打包。
- 最终产品是一个绿色应用程序,用来输出 ASCII 艺术类型的问候。
二、需求
- 大约 12 分钟
- 文本编辑器
- 命令提示符
- Java Development Kit (JDK),版本 1.7+
- Gradle,版本 4.10-rc2 +
三、创建项目
步骤一:
- 为新项目创建一个文件夹,
- 将 Gradle Wrapper 添加到项目中。
命令:
$ mkdir consuming-jvm-libraries
$ cd consuming-jvm-libraries
$ gradle wrapper
:wrapper
BUILD SUCCESSFUL
gradle wrapper 说明:
允许将 Gradle 版本锁定到项目,以后可以用 ./gradlew 替代 gradle 命令。
您可能希望使用 Build Init 插件中的 init 任务,而不是使用内置的 wrapper 任务。 这将为您创建初始项目结构。 有关如何执行此操作的详细说明,请参阅“构建Java应用程序”指南。
步骤二:
- 创建 settings.gradle 文件并设置项目名称。
- 这样做将确保项目以正确的名称构建,而不管项目根文件夹的名称如何。
rootProject.name='greeterApp'
步骤三:
- 创建一个 build.gradle 文件并应用 Java 插件。
apply plugin : 'java'
步骤四:
- 这足以构建一个自包含的Java项目,但您将创建一个greeter应用程序,它将在Ascii-art中打印问候语。为此,需要外部库。
- 继续编辑 build.gradle 并添加 repositories 块。
repositories {
jcenter()
}
使用 JCenter 作为 repository
为了找到 artifacts,你必须告诉 Gradle 在哪里看。 Gradle支持两种专用仓库类型 - Maven 和 Ivy 等。此外,Gradle支持最流行的集中式存储库的简化配置 -- JCenter,Maven Central 和 Google 的 Android 仓库。在本指南中,您使用 JCenter,因为它可以访问 Maven Central 上托管的所有仓库以及发布到 Bintray 的更多仓库。
步骤五:
- 下一步是告诉 Gradle 您的项目需要哪些外部工件。
- 当您正在使用 Ascii-art 应用程序时,您将使用 JFiglet。
- 在 build.gradle 文件的 dependencies 块中添加 JFiglet 库。
dependencies {
implementation 'com.github.lalyos:jfiglet:0.0.8'
}
将 JFiglet 依赖项添加到 implementation 配置中
Gradle 支持各种表示法。上面使用的那个可能是最流行的,它使用最常见的Maven坐标。
添加依赖项有两个部分:一个是依赖项本身,另一个是它添加到的 configuration 。后一术语在 Gradle 中用于通过上下文有效地将依赖关系组合在一起。当前版本使用 Java 插件提供的 implementation 配置。
可以通过研究 ConfigurationContainer,了解有关为自定义目的使用 configurations 的更多信息。
implementation 配置的目的是 收集 库或应用程序 使用的 依赖项,并将它们 添加 到 编译类路径 中,但 不能 通过任何API 导出 它们。由于这是一个 独立的应用程序,因此可以 将 所有依赖项 放在此配置中,以便构建应用程序。这使得JFiglet 库的使用成为一个实现细节,可以在以后更改,而不会影响任何客户端。
通过使用 Gradle 中内置的 dependencies 任务,您可以检查基于每个配置添加的所有依赖项。
$ gradlew dependencies --configuration implementation
--configuration 参数将检查限制为单个配置
如果您使用的是 Gradle 4.0 或更高版本,控制台输出比本指南中的少。在本指南中,输出使用命令行上的 --console-plain标志显示。这样做是为了显示 Gradle 正在执行的任务。
四、创建应用程序
步骤一:
- 继续创建 src / main / java 文件夹,
- 将 GreeterApp.java 文件放在该文件夹中。
src/main/java/GreeterApp.java
import java.io.IOException;
import com.github.lalyos.jfiglet.FigletFont;
public class GreeterApp {
public static void main(String[] args) throws IOException {
String asciiArt = FigletFont.convertOneLine("Hello, " + args[0]);
System.out.println(asciiArt);
}
}
由于这个应用程序很简单,示例中不包含测试。
步骤二:
- 使用 jar 任务构建应用程序。
$ ./gradlew jar
> Task :compileJava
> Task :processResources NO-SOURCE
> Task :classes
> Task :jar
BUILD SUCCESSFUL in 2s
2 actionable tasks: 2 executed
步骤三:
- 由于这是一个应用程序,因此分发它将非常有用。
- 再次编辑 build.gradle 并添加 application 插件。
apply plugin : 'application'
mainClassName = 'GreeterApp'
Application插件是一个非常有用的插件,允许您将应用程序及其所有依赖项捆绑在一起。
这会将 入口点 配置到应用程序中,应用程序需要是一个包含静态 main 方法的类。
步骤四:
- 使用 build 任务,完成 应用程序 的构建。
$ ./gradlew build
> Task :compileJava UP-TO-DATE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :jar UP-TO-DATE
> Task :startScripts
> Task :distTar
> Task :distZip
> Task :assemble
> Task :compileTestJava NO-SOURCE
> Task :processTestResources NO-SOURCE
> Task :testClasses UP-TO-DATE
> Task :test NO-SOURCE
> Task :check UP-TO-DATE
> Task :build
BUILD SUCCESSFUL in 0s
5 actionable tasks: 3 executed, 2 up-to-date
如果检查 build / distributions文件夹,您会注意到.zip和.tar存档。这是准备分发的应用程序。
步骤五:
- 现在是时候手动测试您的应用程序了。
- application 插件提供了一个有用的 installDist 任务,
- 将应用程序安装到 build / install 文件夹中以进行验证。
$ ./gradlew installDist
> Task :compileJava UP-TO-DATE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :jar UP-TO-DATE
> Task :startScripts UP-TO-DATE
> Task :installDist
BUILD SUCCESSFUL in 0s
4 actionable tasks: 1 executed, 3 up-to-date
在build / install中查找应该找到包含 lib 和 bin 文件夹的 greeterApp文件夹。
如果您查看lib文件夹,您将看到您的应用程序和JFiglet JAR。
步骤六:
- 通过更改为build / install / greeterApp文件夹;
- 执行应用程序来运行该应用程序。
$ cd build/install/greeterApp
$ ./bin/greeterApp Gradle
_ _ _ _ ____ _ _
| | | | ___ | | | | ___ / ___| _ __ __ _ __| | | | ___
| |_| | / _ \ | | | | / _ \ | | _ | '__| / _` | / _` | | | / _ \
| _ | | __/ | | | | | (_) | _ | |_| | | | | (_| | | (_| | | | | __/
|_| |_| \___| |_| |_| \___/ ( ) \____| |_| \__,_| \__,_| |_| \___|
|/
恭喜!您刚刚创建了一个从外部存储库中使用第三方库的应用程序。
五、许可 Licensing
第三方 JVM 库在各种许可下发布。
为了兼容性,始终检查所使用的库的许可证(包括通过传递依赖性引入的所有库)非常重要。
例如,JFiglet 库是在 GPL 2.0下发布的。这意味着如果您想要发布刚刚构建的应用程序,它还需要在GPL 2.0下。
您可以使用 Jeroen van Erp 优秀的许可插件,来创建有关项目所有依赖项许可的报告。
六、总结
您现在拥有使用外部库的JVM应用程序。在这个过程中你看到:
- 如何配置 仓库 和 依赖项
- 构建使用 外部依赖项 的应用程序
- 分发 包含所有外部依赖项的 应用程序
七、接下来……
- 阅读有关 使用自定义 Maven 仓库 的信息
- 阅读有关 配置Ivy 仓库 的信息。
- 阅读有关 配置不包含元数据的 本地文件夹 中的工件。
- 阅读有关 高级工件解决方案以及如何处理 版本和依赖项冲突 的信息。
----17:15----