当前位置: 首页 > news >正文

转化古老的Eclipse项目为使用gradle构建

很多古老的Java项目,是使用Eclipse作为IDE开发的。

那么,使用其它IDE的开发者,如何快速地进入这种古老项目的开发呢?或者说,一个Eclipse构建的古老项目,能不能转化成一个IDE无关的项目,进而所有IDE用户都可以参与开发呢?

现在我们就尝试,把一个Eclipse的老项目,转化成一个gradle新项目。

Eclipse的配置

Eclipse的配置文件,主要是两个,一个.project,一个是.classpath。

其中,.project是项目的核心配置,.classpath是项目的依赖包。

所以,我们可以简单地先建立一个build.gradle,来替换.project。

下面先通过gradle.properties来确定gradle的执行参数。

gradle的配置

gradle可以通过系统安装,也可以通过IDE来安装。

gradle运行时的参数信息,配置在gradle.properties文件;构建时的配置信息,亦即项目文件,配置在build.gradle文件。

下面一一进行配置。

gradle.properties gradle执行参数

org.gradle.java.home=/usr/java/jdk1.8.0_101  
org.gradle.jvmargs=-Xmx4096m  
org.gradle.daemon=false  
org.gradle.parallel=true

其中,org.gradle.java.home是Java的目录,我这里使用的是Linux上的Java 8,所以是/usr/java/jdk1.8.0_101。

而org.gradle.daemon是用来选定daemon模式。

settings.gradle

然后,通过settings.gradle,定义项目的名称。这样等构建包的时候,最后就会以这个名字命名。

rootProject.name = hello

最后,是build.gradle这个文件。

build.graadle引入插件

buildscript {  apply plugin: 'java'  apply plugin: 'war'  apply plugin: 'eclipse-wtp'  
}

其中:

  • java 用于管理Java项目的构建。
  • war 用户把项目打包成一个war来部署。
  • eclipse-wtp 用来通过gradle来生成Eclipse配置文件

以上的eclipse-wtp是可选的。如果项目不再使用Eclipse维护,或者仍使用原来的.project、.classpath等Eclipse配置文件,可以不使用这个插件。

使用这个插件,可以把项目构建统一起来。即,项目的构建代码,只有build.gradle,Eclipse的构建是gradle的一种输出。

build.gradle配置项目以及Java版本

group = 'com.test'  
version = '1.0' sourceCompatibility = 1.8  
targetCompatibility = 1.8assert org.gradle.api.JavaVersion.current().isJava8Compatible()

上面几行脚本,定义了项目的版本,以及使用的Java的版本。其中使用assert来确保了gradle执行的时候,也要使用Java 8。

定义仓库

repositories {  mavenCentral()  flatDir {  dirs 'WebRoot/WEB-INF/lib'  }
}

很多老的Java项目,直接把Jar放入了WebRoot/WEB-INF/lib中,这里也支持了这种jar的寻找。

定义jar依赖

接下来,就可以按照.classpath,把使用的jar依赖加入build.gradle。

dependencies {  implementation 'javax.servlet:javax.servlet-api:4.0.1'  ……implementation (files 'WebRoot/WEB-INF/lib/syslog4j-0.9.46-bin.jar')

上面使用了两种jar。

第一种是从前面定义的库里下载。第二种是直接指定了文件路径,可以解决需要的库名+版本与文件名不一致的问题。

设置文件编码

// 设置编码  
tasks.withType(JavaCompile) {  options.encoding = 'GB18030'  
}

因为很多Windows开发者,没有把源代码的编码设置为UTF-8,而是使用了GB18030,即Windows系统的编码。所以,这里重新指定了Java编译的时候,使用的编码,可以避免字符集造成的编译错误。

设置jar重复策略

war {  duplicatesStrategy = DuplicatesStrategy.EXCLUDE  
}

同样,一些老旧的项目,不同的Java库可能有重复,在最终生成war的时候会出错,这里通过排除策略进行避免。

设置源代码以及资源目录

sourceSets {  main {  java {  srcDirs = ['src']  }  resources {  srcDirs = ['WebRoot']  }  }  
}  

设置输出目录

buildDir = 'output'

git配置忽略

使用gradle构建的项目,只依赖build.gradle,其它很多文件都可以动态生成。所以,如果源代码版本使用git管理,可以在.girignore中忽略这些临时文件。

*/.gradle  
*/gradle  
*/gradlew  
*/gradlew.bat
*/output

其中,前面都是gradle的临时文件,最后一项是构建过程以及最终的输出文件,这些都可以忽略,不进入版本管理。

转换完成

如此,就可以在项目中通过gradle进行构建了,还可以通过gradle eclipse-wpt再次生成Eclipse的配置文件。

原有的.project、.classpath以及Ecipse的.settings、.my*等临时文件,都可以清理掉了。

相关文章:

转化古老的Eclipse项目为使用gradle构建

很多古老的Java项目,是使用Eclipse作为IDE开发的。 那么,使用其它IDE的开发者,如何快速地进入这种古老项目的开发呢?或者说,一个Eclipse构建的古老项目,能不能转化成一个IDE无关的项目,进而所有…...

openGauss常见问题与故障处理(二)

2.网络故障定位手段 2.1 网络故障定位手段--常见网络故障引发的异常 在数据库正常工作的情况下,网络层对上层用户是透明的,但数据库在长期运行时,可能会由于各种原因导致出现网络异常或错误。 常见的因网络故障引发的异常有: 1>…...

Mysql 8迁移到达梦DM8遇到的报错

在实战迁移时,遇到两个报错。 一、列[tag]长度超出定义 在mysql中,tag字段的长度是varchar(20),在迁移到DM8后,这个长度不够用了。怎么解决? 在迁移过程中,“指定对象”时,选择转换。 在“列映…...

Android HandlerThread 基础

HandlerThread **一、HandlerThread的基本概念和用途**1. **目的**2. **与普通线程的区别** **二、HandlerThread的使用步骤**1. **创建HandlerThread对象并启动线程**2. **创建Handler并关联到HandlerThread的消息队列**3. **发送消息到HandlerThread的消息队列** **三、Handl…...

【智能算法应用】人工水母搜索算法求解二维路径规划问题

摘要 本文基于人工水母搜索算法(Jellyfish Search Algorithm, JSA),对二维路径规划问题进行了研究。JSA作为一种新兴的群体智能优化算法,模仿了水母在海洋中觅食和迁移的行为,以求解非线性、复杂的优化问题。实验结果…...

【Altium】原理图如何利用参数管理器批量修改元器件属性

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决在使用AD设计原理图的时候,使用参数管理器批量修改元器件的属性。 2、 问题场景 客户在使用ad时,想大批量修改元器件的属性,类似于Cadence中,批量修改Manufactur…...

基于Spring Boot与Redis的令牌主动失效机制实现

目录 前言1. 项目结构和依赖配置1.1 项目依赖配置1.2 Redis连接配置 2. 令牌主动失效机制的实现流程2.1 登录成功后将令牌存储到Redis中2.2 使用拦截器验证令牌2.3 用户修改密码后删除旧令牌 3. Redis的配置与测试4. 可能的扩展与优化结语 前言 在现代Web系统中,用…...

深度学习之循环神经网络(RNN)

1 为什么需要RNN? ​ 时间序列数据是指在不同时间点上收集到的数据,这类数据反映了某一事物、现象等随时间的变化状态或程度。一般的神经网络,在训练数据足够、算法模型优越的情况下,给定特定的x,就能得到期望y。其一…...

Autosar CP Network Management模块规范导读

Network Management模块的主要功能 网络管理适配:作为通信管理器和总线特定网络管理模块之间的适配层,实现不同总线网络管理功能的统一接口,确保系统中各种网络的协同工作。协调功能 网络协调关闭:使用协调算法协调多个网络的关闭,确保它们在合适的时间同步进入睡眠模式,…...

Xshell 7 偏好设置

1 Xshell7 工具——更改用户数据文件夹 就是此电脑目录下的文档 该目录下的7 Xshell下的 applog ColorScheme Files 配色方案文件目录 HighlightSet Files 突出显示集目录 Logs 日志 QuickButton Files 快速命令集 Scripts 脚本文件 Sessions 会话文件 会话文件目录就…...

云计算答案

情境一习题练习 一、选择题 1、在虚拟机VMware软件中实现联网过程,图中箭头所指的网络连接方式与下列哪个相关( C )。 A.仅主机模式 B.桥接 C.NAT D.嫁接 2、请问下图这个虚拟化架构属于什么类型( A …...

浅谈现货白银与白银td的价格差异

西方资本主义世界崇尚自由经济,而我国实行社会主义市场经济,因此二者在金融系统上存在不少差异,反映在贵金属市场中,可能直接表现为价格上的差异。如果投资者对此能有基本的了解,日后面对交易中的特殊价格波动&#xf…...

【QT常用技术讲解】任务栏图标+socket网络服务+开机自启动

前言 首先看网络编程的定义:两个不同主机设备之间的进程通信。C/S(Client-Server)是早期非常典型的软件架构,C/S架构虽然简单,但却非常适用于桌面图形化的QT项目。 本篇的QT项目是从真实的项目中简化出来,满足很多相似的场景&…...

【计算机基础——数据结构——AVL平衡二叉树】

1. BST二叉查找树 1.1 BST二叉查找树的特性 左子树上所有结点的值均小于或等于它的根结点的值。右子树上所有结点的值均大于或等于它的根结点的值。左、右子树也分别为二叉排序树。 1.2 BST二叉查找树的缺点 二叉查找树是有缺点的,在不断插入的时候,…...

体育活动赛事报名马拉松微信小程序开发

功能描述 体育活动赛事报名马拉松微信小程序,该项目是一个体育活动报名小程序,主要功能有活动报名、扫码签到、签到积分、排行奖励、积分兑换等功能。 用户端🔶登录:◻️1.微信授权登录 ◻️2.手机号码授权 🔶首页&am…...

【C++】C++基础知识

一.函数重载 1.函数重载的概念 函数重载是函数的一种特殊情况&#xff0c;C允许在同一作用域中声明几个功能类似的同名函数&#xff0c;这些同名函数的形参列表必须不同。函数重载常用来处理实现功能类似&#xff0c;而数据类型不同的问题。 #include <iostream> using…...

中间件安全

IIS IIS短文件漏洞 此漏洞实际是由HTTP请求中旧DOS 8.3名称约定(SFN)的代字符(~)波浪号引起的。它允许远程攻击者在Web根目录下公开文件和文件夹名称(不应该可被访问)。攻击者可以找到通常无法从外部直接访问的重要文件,并获取有关应用程序基础结构的信息。 利用工具 https…...

Zabbix中文监控指标数据乱码

1&#xff09;点击主机&#xff0c;选择Zabbix server 中的 图形 一项&#xff0c;可以看到当前显示的为乱码 2&#xff09; 下载字体文件&#xff1a; https://gitcode.com/open-source-toolkit/4a3db/blob/main/SimHei.zip 解压unzip -x SimHei.zip 3&#xff09; 替换字体文…...

【AI】AI如何赋能软件开发流程

方向一&#xff1a;流程与模式介绍【传统软件开发 VS AI参与的软件开发】 传统软件开发流程 传统软件开发流程一般可以分为以下几个阶段&#xff1a; 1. 需求分析&#xff1a;在这个阶段&#xff0c;开发团队与客户沟通&#xff0c;明确软件的需求和目标。团队会收集、整理和分…...

恒创科技:什么是 RAID 3 ? RAID 3、4 和5之间有什么区别?

RAID 是一种存储数据以提高性能并减少数据丢失的特定技术。您可以根据自己的需求选择多种 RAID 类型。RAID 3 是列表中比较有效的类型之一。本文将重点介绍这种特定的 RAID 技术&#xff0c;并比较 RAID 3、4 和 5。 RAID 3 的定义 RAID 3 是一种特定的磁盘配置&#xff0c;用于…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

Ubuntu系统多网卡多相机IP设置方法

目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机&#xff0c;交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息&#xff0c;系统版本&#xff1a;Ubuntu22.04.5 LTS&#xff1b;内核版本…...

若依登录用户名和密码加密

/*** 获取公钥&#xff1a;前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...