#构建Java项目#

上一节我们简要介绍了如何编写一个单机的To Do应用,接下来要打包部署成可执行的应用,我们需要编译源代码,生成的class文件需要打包到JAR文件中。JDK提供了javac 和jar工具帮助你实现这些任务,但是你也不想每次源代码发生变化时你都手动去执行这些任务吧。

Gradle插件能够自动化完成这些任务,插件引入了一些领域特有的观念,其中一个Gradle插件就是java插件,Java插件不仅仅只有编译和打包的功能,它给你的项目安排了一个标准布局,并确保你所有的任务都是按序执行,现在该应用java插件来构建你的build脚本了。

##使用java插件##

每个Gradle项目都会创建一个build.gradle文件,如果你想使用java插件只需要添加下面这行代码:

apply plugin: 'java'

这一行代码足以构建你的项目,但是Gradle怎么知道你的源代码放在哪个位置呢?java插件的一个约定就是源代码的位置,默认情况下插件搜索src/main/java路径下的文件,你的包名com.manning.gia.todo会转换成源代码根目录下的子目录,创建build脚本之后你的项目结构应该是这样的:

##构建项目##

现在你可以构建你的项目了,java插件添加了一个build任务到你项目中,build任务编译你的代码、运行测试然后打包成jar文件,所有都是按序执行的。运行gradle build之后你的输出应该是类似这样的:

$ gradle build

:compileJava

:processResources UP-TO-DATE

:classes

:jar

:assemble

:compileTestJava UP-TO-DATE

:processTestResources UP-TO-DATE

:testClasses UP-TO-DATE

:test

:check

:build

输出的每一行都表示一个可执行的任务,你可能注意到有一些任务标记为 UP-TO-DATE,这意味着这些任务被跳过了,gradle能够自动检查哪些部分没有发生改变,就把这部分标记下来,省的重复执行。在大型的企业项目中可以节省不少时间。执行完gradle build之后项目结构应该是类似这样的:

在项目的根目录你可以找到一个build目录,这里包含了所有的输出,包含class文件,测试报告,打包的jar文件,以及一些用来归档的临时文件。如果你之前使用过maven,它的标准输出是target,这两个结构应该很类似。jar文件目录build/libs下可以直接运行,jar文件的名称直接由项目名称得来的,这里是todo-app。

##运行项目##

你只需要使用JDK的java命令就可以执行这个应用了:

$ java -cp build/classes/main com.manning.gia.todo.ToDoApp

--- To Do Application ---

Please make a choice:

(a)ll items

(f)ind a specific item

(i)nsert a new item

(u)pdate an existing item

(d)elete an existing item

(e)xit

>

接下来我们会学习如何自定义项目结构。

##自定义你的项目##

Java插件是一个非常固执的框架,对于项目很多的方面它都假定有默认值,比如项目布局,如果你看待世界的方法是不一样的,Gradle给你提供了一个自定义约定的选项。想知道哪些东西是可以配置的?可以参考这个手册:http://www.gradle.org/docs/current/dsl/,之前提到过,运行命令行gradle properties可以列出可配置的标准和插件属性以及他们的默认值。

修改你的项目和插件属性

接下来你将学习如何指定项目的版本号、Java源代码的兼容级别,前面你用的java命令来运行应用程序,你需要通过命令行选项-cp build/classes/main指定class文件的位置给Java运行时。但是要从JAR文件中启动应用,你需要在manifest文件MANIFEST.MF中包含首部Main-Class。看下面的脚本你就明白怎么操作了:

//Identifies project’sversion through a number scheme

version = 0.1

//Sets Java version compilation compatibility to 1.6

sourceCompatibility = 1.6

//Adds Main-Class header to JAR file’s manifest

jar {

manifest {

attributes 'Main-Class': 'com.manning.gia.todo.ToDoApp'

}

}

打包成JAR之后,你会发现JAR文件的名称变成了todo-app-0.1.jar,这个jar包含了main-class首部,你就可以通过命令java -jar build/libs/todo-app-0.1.jar运行了。

接下来学习如何改变项目的默认布局:

//Replaces conventional source code directory with list of different directories

sourceSets {

main {

java {

srcDirs = ['src']

}

}

//Replaces conventional test source code directory with list of different directories

test {

java {

srcDirs = ['test']

}

}

}

//Changes project output property to directory out

buildDir = 'out'

配置和使用外部依赖

在Java世界里,依赖是分布的以JAR文件的形式存在,许多库都从仓库里获得,比如一个文件系统或中央服务器。Gradle需要你指定至少一个仓库作为依赖下载的地方,比如mavenCentral: //Shortcut notation for configuring Maven Central 2 repository accessible under http://repo1.maven.org/maven2

repositories {

mavenCentral()

}

定义依赖

接下来就是定义依赖,依赖通过group标识,name和version来确定,比如下面这个:

dependencies {

compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.1'

}

Gradle是通过配置来给依赖分组,Java插件引入的一个配置是compile,你可以很容易区分这个配置定义的依赖是用来编译源代码的。

解析依赖

Gradle能够自动检测并下载项目定义的依赖:

$ gradle build

:compileJava

Download http://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.pom

Download http://repo1.maven.org/maven2/org/apache/commons/commons-parent/22/commons-parent-22.pom

Download http://repo1.maven.org/maven2/org/apache/apache/9/apache-9.pom

Download http://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar

:processResources UP-TO-DATE

...

:build

用gradle启动java项目_构建Java项目相关推荐

  1. vue项目查看构建后项目报告,项目个模块依赖占比比例情况

    vue项目查看构建后项目报告,项目个模块依赖占比比例情况 npm run build --report or "report": "vue-cli-service bui ...

  2. Java中脚手架是干什么用的_构建java web脚手架

    前言 程序员无论使用哪种语言进行开发,如果想更快地完成任务,使用一个趁手的ide是第一步,这里我推荐使用IntelliJ IDEA.具体原因我不多说了,大家可以尝试用用看看是不是很贴合程序员的需求.第 ...

  3. java人工智能开源项目_用Java开源项目JOONE实现人工智能编程

    很少有程序员不对这里或者那里所包含的人工智能编程所吸引,然而,许多对AI感兴趣的程序员很快就因其中包含的算法的复杂性而退却.在本文中,我们将讨论一个能大大简化这种复杂性的Java开源工程. Java面 ...

  4. java和python结合做项目_由浅入深Java+Python结合项目实战

    [课程内容] [初级项目:图片社交+电商导购+漂流瓶] 项目实现功能: 用户注册,登录,登出图片的多种上传方式,删除首页图片分类,排序和分页个人页管理图片分享 课程内容: 开发工具和Python语言介 ...

  5. java预研项目_缓存java框架技术预研3:JAVA缓存技术介绍

    几个著名Java开源缓存框架介绍(OSCache,JSC) OSCache是个一个广泛采用的高性能的缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案. OSCache有以下特点: ...

  6. java改名_一个java项目怎么改项目名字

    展开全部 方法一:新du建项目法(有效的zhi备份原来dao的项目) ①新建一个web项目,专项目名属称写你要修改的项目名 ②右键新建的项目--导入(import) ③选择File System  点 ...

  7. java安装_使用Java 9模块化来发布零依赖本机应用程序

    java安装 为什么我不能仅构建一个.EXE? 首次引入Java时,主流编程语言大多要么编译成独立的可执行文件(例如C / C ++,COBOL),要么在解释器中运行(例如Perl,Tcl). 对于许 ...

  8. 尚学堂java培训_送给 Java 自学者或者初学者的最全知识清单,2020 年 Java 就该这么学...

    最近逛知乎,发现有很多想自学 Java 或者 Java 初学者提问,不知道如何学习 Java?我接触 Java 快 8 年的时间了,一直从事 Java 开发工作,自己一直升级打怪,对于如何更好的学习 ...

  9. java 防渗透_「java、工程师工作经验怎么写」-看准网

    java.工程师工作经验一 工作时间:2014年10月03日-2019年10月03日 | 行业:计算机软件 | 职位:java.工程师 1. 根据移动端产品需求和逻辑流程提出合理.清晰的API结构. ...

最新文章

  1. golang 切片 接口_Go 经典入门系列 18:接口(一)
  2. c++ map嵌套队列(队列嵌套结构体指针)ok
  3. highly dynamic working process is a great approach for learning
  4. [css] 请说说CSS3实现文本效果的属性有哪些?
  5. python如何使用ppip安装xlwt_Python-xlwt库的基本使用
  6. 不连续字符的串计数(洛谷P4439题题解,Java语言描述)
  7. make,make install命令
  8. Eclipse用法和技巧十六:自动添加未实现方法2
  9. 【转】互联网架构的三板斧
  10. asp.net窗体验证123
  11. 【mysql日常】Centos安装Mysql客户端
  12. Angular动态加载组件报错:No component factory found for XXXXComponent. Did you add it to
  13. linux生成手机号码字典,字典生成器,木头超级字典生成器
  14. 数据脱敏分类及常用方案
  15. 社科研究中的问卷设计详解——结合论文具体例子来看
  16. a later version of node.js is already installed. Setup will now exit.
  17. 蓝/绿部署 VS 金丝雀部署
  18. 五一结婚,收集祝福。附我的结婚对联,结婚放大像。
  19. 盖茨自说不善招聘、管理:善于“借力”
  20. 【JAVA大厂面试必问】大厂面试八股文整理, 中厂小厂也爱问的八股文!

热门文章

  1. 【DevOps+LIVE】直播复盘 – DevOps能力成长模型2018首发
  2. Orleans—一些概念
  3. Powershell 时间相关
  4. Andorid与webView交互,获取webView选中文字,兼容了iframe
  5. Sublime Text 3 import Anaconda 无法正常补全模块名解决办法
  6. 【MATLAB统计分析与应用100例】案例005:matlab调用medfilt1函数对加噪正弦波信号进行平滑处理
  7. 【北斗】北斗卫星导航系统(BDS)介绍
  8. C#子窗体运行时无法正常最大化的解决办法
  9. Android之实现多张图片点击预览(支持放缩)和滑动
  10. Android之JNI ERROR (app bug): accessed stale global reference 0xb39533f2 (index 19708 in a table of s