转化古老的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.8

assert 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*等临时文件,都可以清理掉了。

相关推荐
2501_933923257 分钟前
Spring Bean作用域揭秘:单例、原型、请求与会话的区别
java·后端·spring·java-ee
学编程就要猛24 分钟前
基于Spring AI 的智能聊天机器人
java·spring ai·chat robot
修炼室27 分钟前
Java开发工程师笔试经验贴【高频知识】
java
木井巳39 分钟前
【记忆化搜索】最长递增子序列
java·算法·leetcode·深度优先·剪枝·推荐算法
杨杨杨大侠1 小时前
知识库已经有了,Java 程序员还要做什么?Spring AI RAG 实战
java·openai·ai编程
伊信1 小时前
Spring AI 基础学习与应用
java·后端
夜郎king1 小时前
基于 Java + Playwright 实现网站自动访问与数据采集(以腾讯云开发者社区为例)
java·playwright·网页数据获取
Anastasiozzzz1 小时前
重新定义 Agent 基建:Redis 在现代 AI 与智能体系统中的工程实践
java·人工智能·redis·ai
careathers1 小时前
【数据结构】队列
java·数据结构
步行cgn1 小时前
Spring 通过 factory-method 实例化 Bean 详解与常见错误排查
java·后端