最近重新在 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
01
02
03
04
05
06
07
08
09
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 这两任务删去了呢,应该的。
本文链接 http://gloveangels.com/initialize-gradle-project-layout/, 来自 隔叶黄莺 Unmi Blog