本文共 3428 字,大约阅读时间需要 11 分钟。
在软件构造实验中,我们将代码提交到GitHub仓库前,实验还要求我们使用其他工具build我们的实验代码以脱离环境,这些工具包括Ant 、Maven 、Gradle、Travis-CI等 。
然而这些构建工具不论是在线的还是离线的,都需要基于Groovy的DSL或xml语言来编写构建配置文件,还需要组织成maven特有的项目目录结构。由于我们并没有时间从头学习这些语言,再加上网上资料大多是两年以前发布的,有些参考性较低,想要在短时间内入手并且使用这些工具十分困难。本人经过艰难摸索,找到了简单使用Gradle进行脱离环境的方法。为了让大家少走弯路,以专门针对软件构造课程的方式,包括使用方法和注意事项,在此分享给大家。
下载地址:
安装很简单,网上有很多教程,只需要注意环境变量的配置,这里分享两个安装教程:
Gradle安装完成后我们需要先建立起Gradle项目骨架(我安装的版本是7.0.2):
首先创建一个我们要作为Gradle项目的目录(这里以testgradle为例)
从cmd进入该目录,使用指令gradle init构建基本骨架
然后选择我们需要的配置
Select type of project to generate: 1: basic 2: application 3: library 4: Gradle pluginEnter selection (default: basic) [1..4] 2Select implementation language: 1: C++ 2: Groovy 3: Java 4: Kotlin 5: Scala 6: SwiftEnter selection (default: Java) [1..6] 3Split functionality across multiple subprojects?: 1: no - only one application project 2: yes - application and library projectsEnter selection (default: no - only one application project) [1..2] 1Select build script DSL: 1: Groovy 2: KotlinEnter selection (default: Groovy) [1..2] 1Select test framework: 1: JUnit 4 2: TestNG 3: Spock 4: JUnit JupiterEnter selection (default: JUnit 4) [1..4] 1Project name (default: testgradle): gradletestSource package (default: gradletest): gradletest> Task :initGet more help with your project: https://docs.gradle.org/7.0.2/samples/sample_building_java_applications.htmlBUILD SUCCESSFUL in 1m 24s2 actionable tasks: 2 executed
完成后,我们可以看到testgradle目录下出现了构建的基本骨架
在cmd内testgradle目录下输入tree可以看到目录结构,可以看出基本为maven结构
D:\java\sourse\testgradle>tree卷 Data 的文件夹 PATH 列表卷序列号为 2CF7-E288D:.├─.gradle│ ├─7.0.2│ │ ├─dependencies-accessors│ │ ├─executionHistory│ │ ├─fileChanges│ │ ├─fileHashes│ │ └─vcsMetadata-1│ ├─buildOutputCleanup│ ├─checksums│ └─vcs-1├─app│ └─src│ ├─main│ │ ├─java│ │ │ └─gradletest│ │ └─resources│ └─test│ ├─java│ │ └─gradletest│ └─resources└─gradle └─wrapper
(其中各个文件的作用可以参考文章:)
但是这与我们的实验中要求的项目目录结构不同,所以我们需要更改。
maven原目录结构中主程序放在src/main/java下,测试程序放在src/test/java下,如果我们直接将src和test内的文件分别放在src/main/java和src/test/java中,其中的读取和写文件操作地址会出错。于是我们可以改变默认的目录结构。
我们使用记事本打开app目录下的build.gradle,在其中加上
sourceSets{
main{ java { srcDirs=['src'] } } test{ java { srcDirs=['test'] } } }
我们将默认读取主程序目录由src/main/java改为app/src,将默认读取测试程序目录由src/test/java改为app/test,如有需要则更改为其他目录。
参考文章:
为了完成build,我们需要在build.gradle上做一些工作
如果不修改编码格式,Gradle会默认按GDK编码编译,其中的汉字会被识为乱码
于是我们在build.gradle中添加
tasks.withType(JavaCompile) {
options.encoding = "UTF-8" }
修改编译编码格式为UTF-8。
实验中我们的jar包都放在lib文件夹下,为了在编译时能够使用到这些jar包,我们需要将lib加载。在build.gradle中的dependencies中添加
implementation fileTree(dir:'lib',include:['*.jar'])
即(其他部分为创建时默认部分)
dependencies {
// Use JUnit test framework. testImplementation 'junit:junit:4.13.1'// This dependency is used by the application.
implementation 'com.google.guava:guava:30.0-jre'implementation fileTree(dir:'lib',include:['*.jar'])
}
参考文章:
将我们的实验目录复制到app目录下,其中原src文件将被替换掉。
cmd中在gradle项目目录下在输入gradle build,gradle会对我们的代码进行build,并会打印提示信息。
完成后在app/build/classes目录下生成各.java文件编译后的.class文件
若测试出错,会在app/build/reports/tests/test下产生index.html网页测试报告
测试参考文章:
(1)lib应在app目录下。
参考文章:
(2)若我们使用网上的教程提供的build.gradle出现Could not find method XXX() for arguments [YYY] on object of type DefaultDependencyHandler问题,可能是版本更换导致DSL语言不可用。
如compile和implementation,因为版本更换高版本使用implementation,而不能识别compile。
参考文章:
转载地址:http://lnnlf.baihongyu.com/