原文标题:Consuming JVM Libraries
原文链接:https://guides.gradle.org/consuming-jvm-libraries/
分类:Gradle Guides
翻译:机器翻译 + 人工调整
目录
内容:如何创建使用外部库的 Java 应用程序。
步骤一:
命令:
$ mkdir consuming-jvm-libraries
$ cd consuming-jvm-libraries
$ gradle wrapper
:wrapper
BUILD SUCCESSFUL
gradle wrapper 说明:
允许将 Gradle 版本锁定到项目,以后可以用 ./gradlew 替代 gradle 命令。
您可能希望使用 Build Init 插件中的 init 任务,而不是使用内置的 wrapper 任务。 这将为您创建初始项目结构。 有关如何执行此操作的详细说明,请参阅“构建Java应用程序”指南。
步骤二:
rootProject.name='greeterApp'
步骤三:
apply plugin : 'java'
步骤四:
repositories {
jcenter()
}
使用 JCenter 作为 repository
为了找到 artifacts,你必须告诉 Gradle 在哪里看。 Gradle支持两种专用仓库类型 - Maven 和 Ivy 等。此外,Gradle支持最流行的集中式存储库的简化配置 -- JCenter,Maven Central 和 Google 的 Android 仓库。在本指南中,您使用 JCenter,因为它可以访问 Maven Central 上托管的所有仓库以及发布到 Bintray 的更多仓库。
步骤五:
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
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);
}
}
由于这个应用程序很简单,示例中不包含测试。
步骤二:
$ ./gradlew jar
> Task :compileJava
> Task :processResources NO-SOURCE
> Task :classes
> Task :jar
BUILD SUCCESSFUL in 2s
2 actionable tasks: 2 executed
步骤三:
apply plugin : 'application'
mainClassName = 'GreeterApp'
Application插件是一个非常有用的插件,允许您将应用程序及其所有依赖项捆绑在一起。
这会将 入口点 配置到应用程序中,应用程序需要是一个包含静态 main 方法的类。
步骤四:
$ ./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存档。这是准备分发的应用程序。
步骤五:
$ ./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。
步骤六:
$ cd build/install/greeterApp
$ ./bin/greeterApp Gradle
_ _ _ _ ____ _ _
| | | | ___ | | | | ___ / ___| _ __ __ _ __| | | | ___
| |_| | / _ \ | | | | / _ \ | | _ | '__| / _` | / _` | | | / _ \
| _ | | __/ | | | | | (_) | _ | |_| | | | | (_| | | (_| | | | | __/
|_| |_| \___| |_| |_| \___/ ( ) \____| |_| \__,_| \__,_| |_| \___|
|/
恭喜!您刚刚创建了一个从外部存储库中使用第三方库的应用程序。
第三方 JVM 库在各种许可下发布。
为了兼容性,始终检查所使用的库的许可证(包括通过传递依赖性引入的所有库)非常重要。
例如,JFiglet 库是在 GPL 2.0下发布的。这意味着如果您想要发布刚刚构建的应用程序,它还需要在GPL 2.0下。
您可以使用 Jeroen van Erp 优秀的许可插件,来创建有关项目所有依赖项许可的报告。
您现在拥有使用外部库的JVM应用程序。在这个过程中你看到:
----17:15----