用gradle启动java项目_构建Java项目

#构建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脚本之后你的项目结构应该是这样的:

dag12.png

##构建项目##

现在你可以构建你的项目了,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之后项目结构应该是类似这样的:

dag13.pngdag14.png

在项目的根目录你可以找到一个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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

今天,滴滴被爆亏损109亿,需裁员2000多人,哪些员工会被裁掉?

全世界只有3.14 % 的人关注了数据与算法之美近日,一份滴滴出行内部流传出来的财务数据显示,该公司2018年持续巨额亏损,全年亏损高达109亿元人民币。若消息属实,那将说明,自2012年滴滴成立以来就一直处于亏损状态&#…

限时秒杀┃“探月计划”来袭,美国米德天文望远镜助孩子观月赏月

▲数据汪特别推荐点击上图进入玩酷屋孩子对于未知的世界充满了好奇,尤其是对于月亮,总是有问不完的问题。例如月亮上是怎么样的?怎么很多人说十五的月亮十六圆?月亮有动物吗?不是说有月兔吗?月亮怎么有时是…

话里话外:企业管理软件的方案设计要规避哪些风险

博主推荐延展咨询资深顾问 梁云文章 企业管理软件作为帮助企业管理者优化工作流程,改善管理水平的信息化工具,现如今被大多数的企业接受并在不同层面进行了应用。作为企业管理软件的方案设计者,我们必须从企业管理者、软件操作者的不同视…

java使用zmodem_SecureCRT 中使用zmodem和Linux服务器交换文件

注意:Linux在默认安装的情况下是没有sz和rz这两条指令的,rmp包为:lrzsz-xx.xx-xxx.rpm,用rmp –q lrzsz查看是否安装,没有的话安装:命令:rpm –ivh lrzsz-xx.xx-xxx.rpm安装后查看:1…

每次有人来家里,总有人问我这个积木在哪买的

▲数据汪特别推荐点击上图进入玩酷屋作为一名资深积木达人,小木我可是大大小小的积木阅览无数,当然乐高也不会放过,虽然“钱包君”已经是路人了。(每月的工资用来买乐高~)之前给大家推荐了一款STEAM积木,小…

NET问答: 为什么时间格式 dd/MM/yyyy 转成 DateTime 会报错?

咨询区 Shantanu Gupta:我在项目中碰到了一个需求,需要将字符串格式的 dd/MM/yyyy 转成 DateTime,比如下面这样:class Program{static void Main(string[] args){var str "22/11/2009";DateTime date DateTime.Parse(s…

Gallery with Video

2019独角兽企业重金招聘Python工程师标准>>> 实现较为完整的图片展示和视频播放功能(Image and video gallery),在FGallery-iPhone( http://code4app.com/codesample/4f67f4546803fa6d45000001)代码的基础上…

实用Python库,这几个你认识不?

近几年Python已成为数据科学行业中大火的编程语言。而作为人工智能核心的机器学习,是一门多领域的交叉学科,专门研究计算机模拟或实现人类学习行为的方法,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。简…

手把手教你构建WPF官方开源框架源代码

从去年微软就将 WPF 开源了,差不多现在所有 WPF 的源代码都开源了。在学习框架的时候,我会做一些改动,期望能构建一个自己的版本进行测试。但是作为一个特别大的框架,想要构建跑起来可不是直接在 VisualStudio 里面点击一下运行就…

程序员中的明星,超模or女团都是程序媛

全世界只有3.14 % 的人关注了数据与算法之美程序员改变世界已经有几十年的历史了,程序员出名又神秘——出名的是大家都知道程序员有多厉害,神秘的是外界对程序员的认知不够具体,“格子衫、双肩包、木讷、代码、……”程序员的标签有很多&…

php 实现类,php如何实现类

php如何实现类php实现类的方法是&#xff1a;【class 类名{ }】&#xff0c;如【<?php class Student { }】。类是由属性、方法、常量组成的&#xff0c;类名以字母、下划线开头&#xff0c;后面跟字母、数字、下划线。在PHP中实现类和对象(学习视频推荐&#xff1a;java课…

Id都是“とつくとき”这样的怎么爬,在线等,急

一般来说&#xff0c;我们推荐使用整数Id作为数据表的主键&#xff0c;这样可以提供不少好处&#xff1a;存储空间小&#xff0c;简洁易懂&#xff0c;方便分页、排序、索引。但当这种Id暴露到外部时&#xff0c;比如订单号&#xff0c;就存在一定的风险了。因为不管是自增、雪…

舍不得删的12个优质公号

全世界有3.14 % 的人已经关注了数据与算法之美在信息爆炸的时代快节奏的生活里 你是否曾有一瞬间觉得忙碌而空虚&#xff1f;以下12个优质公众号能让你在闲暇的时候不断的提升自我&#xff0c;拓宽视野愿以书卷气&#xff0c;行我路千里近现代史研究通讯ID&#xff1a;jxsdyjtx…

php 实现类,php 获取页面中指定内容的实现类

本文为大家下使用php如何获取页面中的指定内容&#xff0c;而且以封装成类&#xff0c;需要的朋友可以参考下本文功能&#xff1a;1.获取内容中的url&#xff0c;email&#xff0c;image。2.替换内容中的url&#xff0c;email&#xff0c;image。url&#xff1a;xxxemail&#…

FastTunnel-开源内网穿透框架

FastTunnelFastTunnel是用.net core开发的一款跨平台内网穿透工具&#xff0c;它可以实现将内网服务暴露到公网供自己或任何人访问。与其他穿透工具不同的是&#xff1a;FastTunnel项目致力于打造一个易于扩展、易于维护的内网穿透框架&#xff0c;任何人都可以基于该框架二次开…

系统架构师-基础到企业应用架构-服务层

一、上章回顾 上篇我们主要讲解了系统架构中的四种架构模式&#xff0c;并且分析了四种架构模式的实现及应用场景&#xff0c;那么先来回顾下架构中的业务逻辑层的使用及总结。 如果大家对图中讲述的内容不明白或者说是不深入那么可以参考上篇讲 解的内容&#xff1a;系统架构师…

Python 10大谬论

全世界只有3.14 % 的人关注了数据与算法之美谬误 #1: Python 是一门新语言伴随着所有的初创公司正在使用它以及孩子们最近也在学习它的事实&#xff0c;这个谬误为何仍然存在是可以理解的。实际上 Python 已经 超过23岁了, 它最初发布于1991年, 早于 HTTP 1.0协议 5年且早于 Ja…

【litrpa专题】首个rpa程序,使用litrpa采集百度地图地铁数据

RPA最近2年里红遍大江南北&#xff0c;人力成本上升&#xff0c;办公自动化势在必行&#xff0c;Excel长期肩负着办公自动化的重任&#xff0c;就算有【Excel催化剂】这些插件的把持&#xff0c;仍然有许多需求未能满足。笔者一直关注RPA领域&#xff0c;从广义来说&#xff0c…

不只是舒适,简直是享受,Google公司用的腰靠,到底有什么秘密?

▲数据汪特别推荐点击上图进入玩酷屋之前小木推荐“德国MINICUTE人体工学腰垫”受到了大家一致的好评和争相购买。小木为什么推荐这一款原因是&#xff1a;据统计&#xff0c;我国腰椎病患者已经突破2亿人。30~40岁人群中&#xff0c;患有颈腰椎病的占比59.1%&#xff01;而且有…

Python花呗分析模型温馨提醒:支出不规范,收入两行泪

全世界只有3.14 % 的人关注了数据与算法之美春节结束&#xff0c;离开家里混吃混喝的怀抱&#xff0c;我又开始了用花呗、还花呗的无限循环。花呗给人一种“有钱”的感觉&#xff0c;我不禁思考&#xff1a;像我这种发工资前靠花呗活着&#xff0c;一发工资就还花呗的平静什么时…