最近重新在 Eclipse 中打开旧的 Maven 项目,总有些什么错误,备受折磨。期间试手了 Ant+Ivy, 现今试用了下 Gradle,感觉不错,它应该才是我真想要的,Maven 差不多该扔到一边去了。
Gradle 像 sbt 构建工具一样,也不会帮我们生成默认的目录布局,这些要自己来做。这不是什么麻烦事,因为只需做一次,可预先写好初始化脚本,幸好本人已习惯 shell 操作。
假设我们有这样的 build.gradle
文件
apply plugin: 'java'
apply plugin: 'war' //有这行时我们需要创建 src/main/webapp 目录
apply plugin: 'eclipse'
我们执行 gradle eclipse
后是不会生成src
目录的,工程下的源文件目录是需要自己来生成的。Gradle 参考 Maven 的标准目录布局,即
1 2 3 4 5 6 7 8 |
src ├── main │ ├── java │ ├── resources │ └── webapp └── test ├── java └── resources |
我们有两种办法初始化目录布局
1. 纯手工打造,在工程目录中执行
mkdir -p src/main/{java,resources}
mkdir -p src/test/{java,resources}
#如果是 web 项目还要生成 webapp 目录
mkdir -p src/main/webapp
可以把它们合成一条命令,比如
mkdir -p src/main/{java,resources} src/test/{java,resources}
#或者 mkdir -p src/{main,test}/{java,resources}
或者
mkdir -p src/main/{java,resources,webapp} src/test/{java,resource}
#或者 mkdir -p src{main,test}/{java,resources} src/webapp
然后再执行 gradle eclipse 命令即可。
2. 用 Gradle 任务来初始化工程目录
普通 Java 项目,这样的 build.gradle
1 2 3 4 5 6 7 |
apply plugin: 'java' apply plugin: 'eclipse' task createJavaProject << { sourceSets*.java.srcDirs*.each { it.mkdirs() } sourceSets*.resources.srcDirs*.each { it.mkdirs()} } |
第一次建立目录时需执行
gradle createJavaProject
gradle eclipse
#或者合成一条指令
gradle createJavaProject eclipse
Java Web 项目,这个 build.gradle
1 2 3 4 5 6 7 8 9 10 11 12 13 |
apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'war' task createJavaProject << { sourceSets*.java.srcDirs*.each { it.mkdirs() } sourceSets*.resources.srcDirs*.each { it.mkdirs()} } task createWebProject(dependsOn: 'createJavaProject') << { def webAppDir = file("$webAppDirName") webAppDir.mkdirs() } |
执行下面命令
gradle createWebProject eclipse
上面可以建立我们需要的目录布局。
综合以上,个人觉得对于那样的一锤子的买卖,用 Shell 命令初始化一次目录就行了,真没必要写在 build.gradle 文件里去招人眼目。而且是不是在创建好了基本的目录之后立即把 createJavaProject 和 createWebProject 这两任务删去了呢,应该的。
本文链接 https://yanbin.blog/initialize-gradle-project-layout/, 来自 隔叶黄莺 Yanbin Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。