最近重新在 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

初始化 Gradle 工程目录(转自: 隔叶黄莺 Unmi Blog)的更多相关文章

  1. iOS开发 frame 与 bounds 的区别与关系 转自隔叶黄莺

    frame和bounds是UIView中的两个属性(property). frame指的是:该view在父view坐标系统中的位置和大小.(参照点是父亲的坐标系统) bounds指的是:该view在本 ...

  2. Android Studio安装后配置默认新工程目录以及.gradle,.android,.m2和system,config目录

    关于在哪里设置:以下所有设置都是在没有打开工程的前提下设置的, Configure > Settings 如图: 不要使用 Configure > Project Defaults> ...

  3. nodejs学习笔记一:安装express框架并构建工程目录

    偶遇node是在一个阳光明媚的上午,无意间打开博客看到一片关于nodejs的介绍,通读全篇后,心情跌宕起伏,哎呀,这么好的东西我竟然现在才知道,这是最气的,于是马上开始制定学习nodejs计划,好了, ...

  4. Android Studio工程目录介绍

    来自知乎: Android Studio工程目录结构 .gradle 是gradle运行以后生成的缓存文件夹. .idea 是android studio/Intellij IDEA工程打开以后生成的 ...

  5. Python第三周第一次作业中关于工程目录各种导入的模拟学习

    目录 Python工程目录 导入自定义模块, 包 记录的缘由 模块搜索路径 模块: 导入模块 导入函数 导入类 多个类 @(Python第三周第一次作业中工程目录,模拟学习) Python工程目录 导 ...

  6. Java Web工程目录结构

    说明 介绍java web 工程的基本结构目录.记录java web 工程结构的学习. Java web 结构 java web严格来说分为两类工程结构:一个是工程编译目录结构,一个是工程发布目录结构 ...

  7. 使用注解和xml两种方式整合Activemq与spring(gradle工程)

    一.新建gradle工程 1.1 使用intellij新建gradle工程步骤省略 二.导入依赖,配置build.gradle plugins { id 'java' } group 'com.bdh ...

  8. [转]Java Web工程目录结构

    说明 介绍java web 工程的基本结构目录.记录java web 工程结构的学习. Java web 结构 java web严格来说分为两类工程结构:一个是工程编译目录结构,一个是工程发布目录结构 ...

  9. 使用FreePic2Pdf导出书签至Word建立层级目录——快速初始化Word笔记本目录

    使用FreePic2Pdf导出书签至Word建立层级目录 --快速初始化Word笔记本目录 文:安徽师范大学2014级计算机科学与技术 王昊 (Get Contact:441301158@qq.com ...

随机推荐

  1. nginx安全相关设置

    Nginx默认是显示版本号,隐藏 # vim nginx.conf 在http {—}里加上server_tokens off; 如: http { ……省略 server_tokens off; h ...

  2. VS C++ 从一个窗口创建另一个窗口

    一.在stdafx.h文件中,添加: #include "Form2.h" / stdafx.h : 标准系统包含文件的包含文件, // 或是经常使用但不常更改的 // 特定于项目 ...

  3. Nginx服务器

    什么是Nginx? Nginx是一种服务器软件,如同apache.tomcat.是一种高性能的HTTP和反向代理服务器以及代理邮件服务器.也就是说Nginx服务器可以发布网站,也可以负载均衡,还可以作 ...

  4. 各大网站CSS代码初始化集合

    css代码之所以初始化,是因为能尽量减少 各浏览器之间的兼容性问题! 腾讯QQ官网 样式初始化 body,ol,ul,h1,h2,h3,h4,h5,h6,p,th,td,dl,dd,form,fiel ...

  5. C 判断路径存在

    1   用   int   access(const   char   *pathname,   int   mode);   判断有没有此文件或目录 --它区别不出这是文件还是目录2   用   i ...

  6. EF的表连接方法Include()

    在EF中表连接常用的有Join()和Include(),两者都可以实现两张表的连接,但又有所不同. 例如有个唱片表Album(AlbumId,Name,CreateDate,GenreId),表中含外 ...

  7. Block的简单使用

    代码块本质上是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你可以像调用其他标准函数一样,传入参数,并得到返回值. 代码块本质上是变量,只不过它存储的数据是一个函数体,因此名字 ...

  8. eclipse Maven -->web project

    http://blog.chinaunix.net/uid-26959955-id-3248053.html http://blog.csdn.net/wilsonke/article/details ...

  9. sqlserver中常用的全局变量

    变量 Transact-SQL语言中有两种形式的变量,一种是用户自己定义的局部变量,另外一种是系统提供的全局变量.局部变量 局部变量是一个能够拥有特定数据类型的对象,它的作用范围仅限制在程序内部.局部 ...

  10. HBase的数据迁移(含HDFS的数据迁移)

    1.启动两个HDFS集群 hadoop0,hadoop1,都是伪分布式的集群 2.启动hadoop3的zookeeper与hbase 注意点:需要开启yarn服务,因为distcp需要yarn. 3. ...