很多古老的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*等临时文件,都可以清理掉了。