【HIT-软件构造】使用Gradle脱离IDE环境

2023-10-29

      在软件构造实验中,我们将代码提交到GitHub仓库前,实验还要求我们使用其他工具build我们的实验代码以脱离环境,这些工具包括Ant 、Maven 、Gradle、Travis-CI等 。

      然而这些构建工具不论是在线的还是离线的,都需要基于Groovy的DSL或xml语言来编写构建配置文件,还需要组织成maven特有的项目目录结构。由于我们并没有时间从头学习这些语言,再加上网上资料大多是两年以前发布的,有些参考性较低,想要在短时间内入手并且使用这些工具十分困难。本人经过艰难摸索,找到了简单使用Gradle进行脱离环境的方法。为了让大家少走弯路,以专门针对软件构造课程的方式,包括使用方法和注意事项,在此分享给大家。

 

Gradle的安装和配置

下载地址:https://gradle.org/install/

安装很简单,网上有很多教程,只需要注意环境变量的配置,这里分享两个安装教程:

https://blog.csdn.net/u011510678/article/details/79589944

https://blog.csdn.net/zhaokai0130/article/details/81008719

 

构建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 plugin
Enter selection (default: basic) [1..4] 2

Select implementation language:
  1: C++
  2: Groovy
  3: Java
  4: Kotlin
  5: Scala
  6: Swift
Enter selection (default: Java) [1..6] 3

Split functionality across multiple subprojects?:
  1: no - only one application project
  2: yes - application and library projects
Enter selection (default: no - only one application project) [1..2] 1

Select build script DSL:
  1: Groovy
  2: Kotlin
Enter selection (default: Groovy) [1..2] 1

Select test framework:
  1: JUnit 4
  2: TestNG
  3: Spock
  4: JUnit Jupiter
Enter selection (default: JUnit 4) [1..4] 1

Project name (default: testgradle): gradletest
Source package (default: gradletest): gradletest

> Task :init
Get more help with your project: https://docs.gradle.org/7.0.2/samples/sample_building_java_applications.html

BUILD SUCCESSFUL in 1m 24s
2 actionable tasks: 2 executed

完成后,我们可以看到testgradle目录下出现了构建的基本骨架

在cmd内testgradle目录下输入tree可以看到目录结构,可以看出基本为maven结构

D:\java\sourse\testgradle>tree
卷 Data 的文件夹 PATH 列表
卷序列号为 2CF7-E288
D:.
├─.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

(其中各个文件的作用可以参考文章:https://www.jianshu.com/p/f33bb06e447e)

但是这与我们的实验中要求的项目目录结构不同,所以我们需要更改。

 

更改目录结构

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,如有需要则更改为其他目录。

参考文章:https://www.cnblogs.com/syrgdm/p/13198130.html

 

编写build.gradle

为了完成build,我们需要在build.gradle上做一些工作

修改编译编码格式为UTF-8

如果不修改编码格式,Gradle会默认按GDK编码编译,其中的汉字会被识为乱码

于是我们在build.gradle中添加

tasks.withType(JavaCompile) {
    options.encoding = "UTF-8"
}

修改编译编码格式为UTF-8。

 

加载本地指定目录jar包

实验中我们的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'])
}

参考文章:https://blog.csdn.net/qq_31945977/article/details/81778044

 

放置代码并进行build

将我们的实验目录复制到app目录下,其中原src文件将被替换掉。

cmd中在gradle项目目录下在输入gradle build,gradle会对我们的代码进行build,并会打印提示信息。

 

 

完成后在app/build/classes目录下生成各.java文件编译后的.class文件

若测试出错,会在app/build/reports/tests/test下产生index.html网页测试报告

测试参考文章:https://blog.csdn.net/ashencode/article/details/82177987


注意事项

(1)lib应在app目录下。

参考文章:https://blog.csdn.net/liangzhihao1995/article/details/52901051

(2)若我们使用网上的教程提供的build.gradle出现Could not find method XXX() for arguments [YYY] on object of type DefaultDependencyHandler问题,可能是版本更换导致DSL语言不可用。

如compile和implementation,因为版本更换高版本使用implementation,而不能识别compile。

参考文章:https://blog.csdn.net/jiangguangchao/article/details/106673062

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【HIT-软件构造】使用Gradle脱离IDE环境 的相关文章

随机推荐

  • windows10 配置ftp实现局域网文件共享。(包含坑点及解决)

    坑点写在前面 为在网上的教程却没有成功的用户节约时间 坑点一 打开网络发现 控制面板 gt gt 网络和Internet gt gt 网络和共享中心 gt gt 高级共享设置 坑点二 WindowsDefender 防火墙 控制面板 gt
  • 爬虫实例(二)—— 爬取高清4K图片

    大家好 我是 Enovo飞鱼 今天继续分享一个爬虫案例 爬取高清4K图片 加油 目录 前言 增加异常处理 增加代码灵活性 基本环境配置 爬取目标网站 分析网站页面 具体代码实现 图片下载示例 感谢支持 前言 上篇内容 我们已经了解并惊叹于5
  • 算法训练营第二十四天(8.7)

    目录 LeeCode39 Combination Sum LeeCode39 Combination Sum II LeeCode131 Palindrome Partitioning LeeCode39 Combination Sum 题
  • 一文弄清using namespace std;的作用[2021最新版]

    using namespace std 到底有什么用 为什么我们每次头文件后面都要加它 不加它会怎么样 导读 对于很多学习C 的同学 老师教同学们写的一个程序就是 hello world 同时也会在不经意间在头文件的后面加上using na
  • 遥感图像处理学习笔记二——遥感图像的分类处理

    1 基本概念 地物的类 具有同种特性的地物集合称为一类 一类地物具有同一标志 不同种类地物具有不同的光谱特性 地物反射和发射电磁波能量的能力 分类 根据各类样本内在的相似性 采用某种判决准则 将特征空间分割成若干集合 的过程 2 基本思想
  • 循环-13. 求特殊方程的正整数解

    循环 13 求特殊方程的正整数解 15 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 张彤彧 浙江大学 本题要求对任意给定的正整数N 求方程X2 Y2 N的全部正整数解 输
  • 不能安装64位java虚拟机_virtualbox不能安装64位系统的解决方法

    大家先来看看问题描述 新建虚拟机的列表中没有64位系统选项 如何解决 操作系统 Windows 7 64位 虚拟机 Oracle VM VirtualBox Linux版本 Ubuntu4 0 64 解决方法 修改机器中的BIOS配置 st
  • Linux ——objdump和readelf的使用

    在一个程序编译结束后 会生成 o的文件 但往往当我们用vim命令查看这个文件内容时 就全是乱码 像这样 那么我们应该如何查看 o文件呢 objdump和readelf的使用 objdump 首先先让我们了解一下什么是odjdump 作用 查
  • Gson的使用

    一 Gson的基本用法 生成json Gson gson new Gson User user new User 用户 28 String jsonObject gson toJson user name 用户 age 28 解析JSON
  • vue-格式化时间-封装时间过滤器

    一 全局封装时间处理过滤器 filter js export default function originVal const dt new Date originVal const y dt getFullYear const m dt
  • QT中QMainWindow、QWidget、QDialog的区别

    QMainWindow 详细描述 QMainWindow类提供一个有菜单条 锚接窗口 例如工具条 和一个状态条的主应用程序窗口 主窗口通常用在提供一个大的中央窗口部件 例如文本编辑或者绘制画布 以及周围菜单 工具条和一个状态条 QMainW
  • 2022 阿里全球数学竞赛获奖名单公布,其中 00 后选手占了一半多,如何评价这一现象?

    2022 阿里全球数学竞赛获奖名单公布 其中 00 后选手占了一半多 如何评价这一现象 写在前面 本届比赛共吸引55000余人报名 其中00后占比超4成 而在获奖的77人中 00后更是拿走了一半的奖项 00后 作为新时代科研新势力 正在慢慢
  • 系统接口日志记录-AOP

    在进行系统开发的时候 系统提供给前端或者第三方使用的接口 要对接口的调用情况 接口的接收的参数 返回的结果 调用者 调用接口的ip等 进行记录 通过Spring AOP的 环绕通知 可以很容易实现该功能 实现该功能对调用接口数据的记录也便于
  • zigbee中有几个不同的频率,是啥意思?有啥联系和区别

    zigbee中有几个不同的频率 是啥意思 有啥联系和区别 2011 05 30 09 03 cnsxgh 分类 工程技术科学 浏览1209次 channel 2405Mhz Pan ID 0x0628 工作频率 2 4Ghz 提问者采纳 2
  • JAVA中的时间大小比较

    1 时间的比较 import java text DateFormat import java text ParseException import java text SimpleDateFormat import java util D
  • Windows遇到ERR_NETWORK_ACCESS_DENIED处理方案

    问题描述 用了总部vpn 总是打不开总部资源 之前可以一直提示 禁止访问互联网ERR NETWORK ACCESS DENIED 郁闷了好几天 今天自己查查资料解决了 说明 问题总是能解决的 只是需要耐心 解决步骤 打开cmd 切以管理员身
  • window.open 使用方法总结

    1 最基本的弹出窗口代码 因为着是一段javascripts代码 所以它们应该放在之间 是对一些版本低的浏览器起作用 在这些老浏览器中不会将标签中的代码作为文本显示出来 要养成这个好习惯啊 window open test html 用于
  • 蓝牙之八-HFP

    HFP 在调试安卓的HFP client时遇到了如下问题 其中有一个E提示 因为AT命令的错误 所有创建SLC失败 然后断开RFCOMM链接 表现出来的是已经配对的手机不停的断开重连 HFP协议 HFP Hands free Profile
  • 2020重庆市法治理论知识考试答案查询收集

    重庆市法治理论知识考试平台考试题 下面就是搜集答案的代码 我得到的题目就下面这些 答案没放上来 我这也有 文档下载地址 链接 https pan baidu com s 1rLxqMdFUPxCjEVdpepq wg 提取码 dnyq 复制
  • 【HIT-软件构造】使用Gradle脱离IDE环境

    在软件构造实验中 我们将代码提交到GitHub仓库前 实验还要求我们使用其他工具build我们的实验代码以脱离环境 这些工具包括Ant Maven Gradle Travis CI等 然而这些构建工具不论是在线的还是离线的 都需要基于Gro