这篇文章使用容器方式执行Gradle的构建,使用Gradle对示例代码进行jar包的构建并验证结果,来说明容器方式如何进行Gradle构建。
可以使用Gradle官方镜像,也可使用liumiaocn/gradle下的镜像,此镜像也是完全基于官方镜像的方式做成。
镜像下载镜像下载: docker pull liumiaocn/gradle:jdk8.6.0.1
版本确认版本确认:docker run --rm liumiaocn/gradle:jdk8.6.0.1 gradle --version
可以看到此Gradle的版本为6.0.1
liumiaocn:jar liumiao$ docker run --rm liumiaocn/gradle:jdk8.6.0.1 gradle --version ------------------------------------------------------------ Gradle 6.0.1 ------------------------------------------------------------ Build time: 2019-11-18 20:25:01 UTC Revision: fad121066a68c4701acd362daf4287a7c309a0f5 Kotlin: 1.3.50 Groovy: 2.5.8 Ant: Apache Ant(TM) version 1.10.7 compiled on September 1 2019 JVM: 1.8.0_232 (AdoptOpenJDK 25.232-b09) OS: Linux 4.9.184-linuxkit amd64 liumiaocn:jar liumiao$事前准备:代码准备
做一个简单的HelloWorld的java类,然后将其打成一个jar文件,具体的文件结构如下所示
liumiaocn:jar liumiao$ ls build.gradle settings.gradle src liumiaocn:jar liumiao$ tree . . ├── build.gradle ├── settings.gradle └── src └── main ├── java │ └── com │ └── liumiaocn │ └── HelloPlugin.java └── resources └── com └── liumiaocn └── resource.xml 8 directories, 4 files liumiaocn:jar liumiao$settings.gradle
liumiaocn:jar liumiao$ cat settings.gradle rootProject.name = 'jarPluginSample' liumiaocn:jar liumiao$
- rootProject.name在创建jar文件时根据约定会被使用。
liumiaocn:jar liumiao$ cat build.gradle apply plugin: 'java' version = '1.0' jar { manifest { attributes 'Implementation-Title': 'Gradle plugin sample: create jar distribution', 'Implementation-Version': version, 'Main-Class': 'com.liumiaocn.HelloPlugin', 'Created-By': 'liumiaocn' } } liumiaocn:jar liumiao$
- apply plugin: ‘java’:是引入java plugin支持唯一需要做的事情
- version:在生成的jar文件中会按照约定生成在jar文件名中
- jar{}: jar是java plugin所实现的task之一,这里使用它直接用来生成jar文件
- manifest{}:用于设定MANIFEST.MF的内容
- Main-Class: 指定jar文件中包含main方法的类
liumiaocn:jar liumiao$ cat src/main/resources/com/liumiaocn/resource.xml liumiaocn:jar liumiao$
- 仅仅是一个示例,用于演示在jar文件中资源文件也被打包的过程
liumiaocn:jar liumiao$ cat src/main/java/com/liumiaocn/HelloPlugin.java package com.liumiaocn; public class HelloPlugin { public static void main(String[] args) { System.out.println("Hello, LiuMiao"); } } liumiaocn:jar liumiao$构建
做好上述准备之后,直接将当前示例代码目录挂载至镜像的WORKDIR(/home/gradle)下,执行gradle jar命令即可。
执行命令:docker run --rm -v `pwd`:/home/gradle liumiaocn/gradle:jdk8.6.0.1 gradle jar
liumiaocn:jar liumiao$ ls build.gradle settings.gradle src liumiaocn:jar liumiao$ docker run --rm -v `pwd`:/home/gradle liumiaocn/gradle:jdk8.6.0.1 gradle jar Starting a Gradle Daemon (subsequent builds will be faster) > Task :compileJava > Task :processResources > Task :classes > Task :jar Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0. Use '--warning-mode all' to show the individual deprecation warnings. See https://docs.gradle.org/6.0.1/userguide/command_line_interface.html#sec:command_line_warnings BUILD SUCCESSFUL in 9s 3 actionable tasks: 3 executed liumiaocn:jar liumiao$
构建结果确认
liumiaocn:jar liumiao$ ls build build.gradle settings.gradle src liumiaocn:jar liumiao$ tree . . ├── build │ ├── classes │ │ └── java │ │ └── main │ │ └── com │ │ └── liumiaocn │ │ └── HelloPlugin.class │ ├── generated │ │ └── sources │ │ └── annotationProcessor │ │ └── java │ │ └── main │ ├── libs │ │ └── jarPluginSample-1.0.jar │ ├── resources │ │ └── main │ │ └── com │ │ └── liumiaocn │ │ └── resource.xml │ └── tmp │ ├── compileJava │ └── jar │ └── MANIFEST.MF ├── build.gradle ├── settings.gradle └── src └── main ├── java │ └── com │ └── liumiaocn │ └── HelloPlugin.java └── resources └── com └── liumiaocn └── resource.xml 27 directories, 8 files liumiaocn:jar liumiao$
jar文件结果确认
liumiaocn:jar liumiao$ java -jar build/libs/jarPluginSample-1.0.jar Hello, LiuMiao liumiaocn:jar liumiao$
本地没有JDK或者JRE环境,直接使用此Gradle镜像也是可以同样确认的
liumiaocn:jar liumiao$ docker run --rm -v `pwd`:/home/gradle liumiaocn/gradle:jdk8.6.0.1 java -jar build/libs/jarPluginSample-1.0.jar Hello, LiuMiao liumiaocn:jar liumiao$