利用Gradle对java项目进行build

在这学期的软件构造课程的实验中,老师将会利用集成工具对上传的java代码进行检查,如果自动构建失败,则被判为0分。毕竟谁也不想看到自己辛辛苦苦写的代码,因为最后的构建而得0分。因此,在此分享我利用Gradle进行build的过程。就算是利用Gradle,每个人的build方法也是有很多的不同之处,这里仅分享我的方法。此外,关于eclipse中的gradle插件我是没有用到的,因为实验代码需要脱离eclipse开发环境,所以我就尽量不用它了。
一、 关于Gradle

什么是Gradle呢,Gradle 就是一个通用工具。它可以通过脚本构建任何你想要实现的东西。Gradle在语法上是基于Groovy语言的。它同Ant和Maven一样,都属于java构建工具,三者各有优缺点,详情请看Ant vs Maven vs Gradle,今天我们使用Gradle进行构建。

二、 搭建Gradle环境

下载

第一步,当然是下载gradle,这里我直接在gradle.org官网上下载的,当前最新版本是4.6。下载完成后,解压到一个目录中,对于放置的目录并没有固定的要求,由于我的实验代码放到了D盘,这里直接把它也放在了D盘。

配置环境

然而,下载完成后,并不能直接使用,我们需要配置两个环境变量,如下图所示,这里鼠标选中计算机,右键选择“属性”,点击“高级系统设置”,然后选择“环境变量”。这里我们需要配置两项,首先要新建一个用户变量,变量名为:GRADLE_HOME,变量值为解压后的gradle目录文件夹的路径,指向gradle安装目录的根目录,例如我的是D:\gradle-4.6。接下来配置Path变量,在Path路径中,点击“编辑”,在其中增加gradle目录下的bin文件夹,我的为D:\gradle-4.6\bin,如果路径过长,影响整洁性,直接利用%GRADLE_HOME%\bin也可以


检查

打开cmd窗口,输入gradle -v命令,如果出现以下信息,则配置成功,否则的话,继续检查那一部分没有做好。


OK,接下来就可以开始我们的build过程了。

三、Build已有java项目

新建.gradle文件

首先,如果要利用gradle进行build的话,必须要在项目里创建build.gradle文件,因为当前我的项目中有四个小的项目,要分别build的话,需要再创建一个配置文件,文件名为settings.gradle,用来包含各个子项目。注意,不能随意更改文件名。然后在每个项目的根目录下分别创建属于自己的build.gradle文件。

由于我们要构建多个项目,因此我们需要在settings.gradle中添加各个子项目的名称,这里我包含的就是P1,P2,P3,P4。

include 'src:P1', 'src:P2', 'src:P3', 'src:P4'

在根目录中,我们利用gradle提供的subprojects()方法,配置所有的子项目。因此,在build.gradle文件最外层需要添加这个方法。利用gradle中的插件,开始我们的构建:

apply plugin: 'java'

然后利用repositories()方法天剑maven仓库。

这里,根项目不需要依赖,因为所有的java代码全都在子项目中。

其实,接下来要做的,就是在每个子项目中添加依赖即可,但是由于我们的gradle的资源路径一般都是固定的:

/src/main/java/**

/src/main/java/**

也就是说,如果我们不更改默认的路径,只有在这里的代码才会被编辑,但是实验中的test文件放在了与src并列的文件夹下,因此我们在添加依赖前,利用sourceSets设置属于我们当前项目的目录结构:

sourceSets {
	main {
		java {
			//填写srcDir
		}
	}
	test {
		java {
			//填写srcDir
		}
	}
}

设置完成后,添加依赖包即可:

dependencies {
	
}
注意,要达到本次实验的目的,这里要添加本地的依赖包,不要利用网上的。

出现的问题:

由于我的lib中添加的Junit依赖不完全,导致我构建失败,出现以下错误(由于错误报告过长,只截取一部分):
java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
Caused by: java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 47 more

原因是最新的版本中,去除了hamcrest包 ,还需要在增加这个,这里我直接在eclipse中的安装路径下找到了该jar包,也可以直接在这里下载(需要科学上网),如果登录不了,可以直接在网盘中下载,网盘链接

希望可以帮到你,如果发现我有任何错误的地方,请在下方评论,以便于我更改,谢谢。


参考文档:

Java 构建入门

Gradle学习系列之八——构建多个Project

Gradle 第七讲 之 android插件的入门2 SourceSets

JUnit-4.11使用报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing错误

猜你喜欢

转载自blog.csdn.net/seriousplus/article/details/79586241
今日推荐