java gradle入门_Gradle入门:我们的第一个Java项目

java gradle入门

这篇博客文章描述了如何使用Gradle编译和打包一个简单的Java项目。

我们的Java项目只有一个要求:

我们的构建脚本必须创建一个可执行的jar文件。 换句话说,我们必须能够使用以下命令运行程序:

java -jar jarfile.jar

让我们找出如何满足这一要求。

创建一个Java项目

我们可以通过应用Java插件来创建Java项目。 我们可以通过在build.gradle文件中添加以下行来实现

apply plugin: 'java'

这就对了。 现在,我们已经创建了一个Java项目。

Java插件向我们的构建添加了新的约定(例如,默认的项目布局), 新的任务和新的属性 。

让我们继续前进,快速浏览一下默认的项目布局。

Java项目的项目布局

Java项目的默认项目布局如下:

  • src / main / java目录包含我们项目的源代码。
  • src / main / resources目录包含我们项目的资源(例如属性文件)。
  • src / test / java目录包含测试类。
  • src / test / resources目录包含测试资源。

我们构建的所有输出文件都在构建目录下创建 。 该目录包含与该博客文章相关的以下子目录(也有其他子目录,但以后我们将讨论它们):

  • classes目录包含已编译的.class文件。
  • libs目录包含由构建创建的jarwar文件。

让我们继续并将简单的主类添加到我们的项目中。

在我们的版本中添加主类

让我们创建一个简单的主类,该主类将单词:“ Hello World”打印到System.outHelloWorld类的源代码如下所示:

package net.petrikainulainen.gradle;public class HelloWorld {public static void main(String[] args) {System.out.println("Hello World!");}
}

HelloWorld类已添加到src / main / java / net / petrikainulainen / gradle目录。

那很好。 但是,我们仍然必须编译和打包我们的项目。 让我们继续看一下Java项目的任务。

Java项目的任务

Java插件向我们的构建中添加了许多任务,但是与此博客文章相关的任务是:

  • 组装任务将编译应用程序的源代码并将其打包到jar文件中。 此任务不会运行单元测试。
  • 构建任务执行项目的完整构建。
  • clean任务删除构建目录。
  • compileJava任务编译我们应用程序的源代码。

我们还可以通过在命令提示符处运行以下命令来获取可运行任务及其描述的完整列表:

gradle tasks

这是在不阅读构建脚本的情况下获得项目概述的好方法。 如果在示例项目的根目录中运行此命令,则会看到以下输出:

> gradle tasks
:tasks------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------Build tasks
-----------
assemble - Assembles the outputs of this project.
build - Assembles and tests this project.
buildDependents - Assembles and tests this project and all projects that depend on it.
buildNeeded - Assembles and tests this project and all projects it depends on.
classes - Assembles classes 'main'.
clean - Deletes the build directory.
jar - Assembles a jar archive containing the main classes.
testClasses - Assembles classes 'test'.Build Setup tasks
-----------------
init - Initializes a new Gradle build. [incubating]
wrapper - Generates Gradle wrapper files. [incubating]Documentation tasks
-------------------
javadoc - Generates Javadoc API documentation for the main source code.Help tasks
----------
dependencies - Displays all dependencies declared in root project 'first-java-project'.
dependencyInsight - Displays the insight into a specific dependency in root project 'first-java-project'.
help - Displays a help message
projects - Displays the sub-projects of root project 'first-java-project'.
properties - Displays the properties of root project 'first-java-project'.
tasks - Displays the tasks runnable from root project 'first-java-project'.Verification tasks
------------------
check - Runs all checks.
test - Runs the unit tests.Rules
-----
Pattern: build<ConfigurationName>: Assembles the artifacts of a configuration.
Pattern: upload<ConfigurationName>: Assembles and uploads the artifacts belonging to a configuration.
Pattern: clean<TaskName>: Cleans the output files of a task.To see all tasks and more detail, run with --all.BUILD SUCCESSFULTotal time: 2.792 secs

让我们继续前进,了解如何打包Java项目。

打包我们的Java项目

我们可以使用两个不同的任务来打包应用程序:

如果在命令提示符处运行命令gradle组装 ,我们将看到以下输出:

> gradle assemble
:compileJava
:processResources 
:classes
:jar
:assembleBUILD SUCCESSFULTotal time: 3.163 secs

如果我们在命令提示符下运行命令gradle build ,我们将看到以下输出:

> gradle build
:compileJava
:processResources 
:classes
:jar
:assemble
:compileTestJava 
:processTestResources 
:testClasses 
:test 
:check 
:buildBUILD SUCCESSFULTotal time: 3.01 secs

这些命令的输出表明,这些任务的不同之处在于:

  • 组装任务仅运行打包我们的应用程序所需的任务。
  • 构建任务运行打包我们的应用程序所需的任务,并运行自动化测试。

这两个命令都将first-java-project.jar文件创建到build / libs目录。

通过使用以下模板创建创建的jar文件的默认名称: [项目名称] .jar ,并且该项目的默认名称与创建它的目录的名称相同。 因为我们的项目目录的名称是first-java-project ,所以创建的jar的名称是first-java-project.jar

现在,我们可以尝试使用以下命令来运行我们的应用程序:

java -jar first-java-project.jar

执行此操作时,将看到以下输出:

> java -jar first-java.project.jar
No main manifest attribute, in first-java-project.jar

问题是我们尚未在清单文件中配置jar文件的主类。 让我们找出如何解决这个问题。

配置jar文件的主类

Java插件向我们的项目添加了一个jar任务 ,每个jar对象都有一个manifest属性,该属性是Manifest的一个实例。

我们可以使用Manifest接口的attribute()方法配置创建的jar文件的主类。 换句话说,我们可以使用包含键值对的映射来指定添加到清单文件的属性。

我们可以通过设置Main-Class属性的值来设置应用程序的入口点。 在对build.gradle文件进行了必要的更改之后,其源代码如下所示(相关部分已突出显示):

apply plugin: 'java'jar {manifest {attributes 'Main-Class': 'net.petrikainulainen.gradle.HelloWorld'}
}

Java SE教程提供了有关清单文件的更多信息 。

通过运行gradle assemblegradle build命令创建了一个新的jar文件之后,可以使用以下命令运行jar文件:

java -jar first-java-project.jar

当我们运行应用程序时,以下文本将打印到System.out

> java -jar first-java-project.jar
Hello World!

今天就这些。 让我们找出从这篇博客文章中学到的知识。

摘要

现在,我们使用Gradle创建了一个简单的Java项目。 这篇博客文章教会了我们四件事:

  • 我们知道可以通过应用Gradle Java插件来创建Java项目。
  • 我们了解到Java项目的默认目录布局与Maven项目的默认目录布局相同。
  • 我们了解到,可以从构建目录中找到由构建生成的所有输出文件。
  • 我们了解了如何自定义添加到清单文件的属性。

PS此博客文章的示例项目可在Github上获得 。

翻译自: https://www.javacodegeeks.com/2014/06/getting-started-with-gradle-our-first-java-project.html

java gradle入门

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

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

相关文章

非核心版本的计算机上_哪个版本的Microsoft Office最好使用、来占用最少的资源...

使用过多个版本的Microsoft Office和WPS Office。让我推荐几个版本&#xff1a;Microsoft Office 2003和Microsoft Office 2007是两个资源最密集的版本(不考虑旧版本的Office)&#xff0c;除非它们是特别旧的计算机&#xff0c;否则不建议安装。对于十年前的旧计算机&#xff0…

linux条件测试的三种,shell编程之条件测试 | 旺旺知识库

一、条件测试语法&#xff1a;test 测试内容[ 测试内容 ] ##注意中括号与测试内容间有空格[[ 测试内容 ]](( 测试内容 )) ##只能用于测试数值大小&#xff0c;后面详解前三种测试语法基本等同。二、数值测试&#xff1a;2.1 常见的数值测试&#xff1a;int1 -eq int2 如…

是vans_硬核复刻,就服VANS棋盘格

近几年复刻已成为 Sneaker 圈的新趋势&#xff0c;各大品牌纷纷将自家经典且具有年代感的鞋款复刻再造。而这其中最硬核的还要属 VANS &#xff0c;在今年三月释出 VANS X FAST TIMES 鞋款&#xff0c;标志性的棋盘格元素加上醒目亮眼的红字 Logo &#xff0c;为穿着者带来不一…

使用SDKMAN管理多个Java SDK! 轻松

SDKMAN&#xff01; 是用于管理多个软件开发套件的并行版本的便捷工具。 该工具对Java开发人员特别有用&#xff0c;因为它支持JVM的SDK&#xff0c;例如Java&#xff0c;Groovy&#xff0c;Scala&#xff0c;Kotlin和Ceylon。 还支持Gradle&#xff0c;Maven&#xff0c;Sprin…

linux wordpress伪静态,wordpress程序在win和Linux系统下的伪静态设置 - 张力博客

这是一篇很早就应该写的文章&#xff0c;而在昨天就有朋友问我&#xff0c;为什么不写一下关于wordpress的伪静态设置呢&#xff1f;今天这篇文章我就来跟大家说一下&#xff0c;关于wordpress程序在win和Linux系统下的伪静态设置方法。第一种&#xff1a;win系统下的wordpress…

Java并发编程实战_阿里P9整理分享的亿级流量Java高并发与网络编程实战PDF

前言为了帮助初级开发者快速掌握高并发、网络编程、微服务、海量数据的处理这些实用技术&#xff0c;本文以“理论范例”的形式对各个知识点进行了详细的讲解&#xff0c;力争让读者在实践中快速掌握相关知识。为了让有java、数据库和web基础的学生&#xff0c;初、中级java开发…

r语言 林元震_科学网—R语言简介 - 林元震的博文

R既是软件&#xff0c;也是语言&#xff0c;在GNU协议General Public Licence下免费发行&#xff0c;是1995年由新西兰奥克兰大学统计系的Ross Ihaka和Robert Gentleman基于S语言基础上共同开发的一种统计软件。现在由R开发核心小组(R Development Core Team)负责维护与更新&am…

英特尔 620 显卡 驱动 七代cpu_英特尔的智能“整体厨房”

其实&#xff0c;英特尔的战略非常容易理解。做最智能的“橱具”、最智能的“橱柜”、最智能的“橱电”。然后&#xff0c;顺理成章地构建起最智能“整体厨房”。再然后&#xff0c;用户可以在最优适配的软硬件环境中&#xff0c;专注于对数据的烹饪。当然&#xff0c;这是只是…

linux kvm安装win7,详解在 KVM 上安装 Win7 虚拟机

详解在 KVM 上安装 Win7 虚拟机发布时间&#xff1a;2017-04-04 21:09来源&#xff1a;互联网当前栏目&#xff1a;web技术类之前都是在用Linux 虚机&#xff0c;现在有需要用到Win7 虚机&#xff0c;才发现在 KVM 上安装 Win7 的过程远比想象中的复杂。本文就把其过程做个简单…

linux 如何获得后缀_Bugku:杂项 linux

打开这道题&#xff0c;标题是linux&#xff0c;让人心中一紧。提示为linux基础问题。下载压缩包解压之后是一个文件&#xff0c;没有后缀名&#xff0c;用010 Editor打开看看。全是空啊&#xff01;&#xff01;&#xff01;&#xff01;突然在中间找到了一点点文字&#xff0…

gradle引入依赖:_Gradle入门:依赖管理

gradle引入依赖:即使不是没有可能&#xff0c;创建没有任何外部依赖关系的现实应用程序也是一项挑战。 这就是为什么依赖性管理是每个软件项目中至关重要的部分的原因。 这篇博客文章描述了我们如何使用Gradle管理项目的依赖关系。 我们将学习配置已使用的存储库和所需的依赖项…

jquery怎么判断不同的字显示不同的颜色_这个双十一,摄影师的显示器该换了,优派VP2785-2K显示器评测_显示器...

2020-11-03 23:07:380点赞0收藏0评论想攒一台电竞主机、家用主机、酷炫主机无从下手&#xff1f;想省钱又怕性能不达标&#xff1f;值得买帮你打造定制化DIY装机工具&#xff0c;自助全网比价装机&#xff0c;提供最适合的搭配方案&#xff0c;解决各种攒机场景下难题。>快快…

c语言字体取模软件下载,非常好用的lcd汉字取模软件下载_非常好用的lcd汉字取模软件官方下载-太平洋下载中心...

修正了华文中宋汉字模生成过程中的切(底)边现象&#xff0c;配合lcmsim排版仿真软件一起使用&#xff0c;可以大大提高单片机编程的工作效率。几点说明&#xff1a;1。打开功能是专门用于对c语言文件自动提取显示所需要的汉字&#xff0c;进行点阵码数据转换的&#xff0c;在您…

thymeleaf双重循环_spring boot: 用thymeleaf嵌套循环展示多层数据(spring boot 2.3.2)

一&#xff0c;什么情况下会用到嵌套循环&#xff1f;当我们展示多个分类时&#xff0c;每个分类下又展示出推荐的前几个商品&#xff0c;这时我们需要用到嵌套循环看一个例子&#xff1a;说明&#xff1a;作者:刘宏缔 邮箱: 371125307qq.com二&#xff0c;演示项目的相关信息1…

CUBA平台:TypeScript SDK和REST API

在本文中&#xff0c;我们将讨论已存在很长时间但尚未广为人知的CUBA平台的功能- 前端SDK生成器 &#xff0c;并了解它如何与CUBA的REST API插件一起使用 。 Java JavaScript –网络婚姻 仅八年前&#xff0c;我们Java开发人员在我们的Web应用程序中使用JavaScript作为“第二…

wifiphisher 依赖_铂瑞思:总是依赖别人的话,就永远也长不大

我们每个人都会或多或少的对他人产生依赖&#xff0c;依赖一词&#xff0c;可被定义为过度需要依靠他人的支持、指导、照顾和保护。但一部分人由于形成了与他人不同的思维与行为模式&#xff0c;导致了依赖型人格障碍的产生。依赖性人格障碍以过分依赖为特征&#xff0c;表现为…

米兔机器人自主编程_978个零件+自主编程,米兔机器人价格仅为友商八分之一...

作为一个“大孩子”&#xff0c;我也喜欢拼积木&#xff0c;看重了一款乐高的可变性积木竟然售价4000多&#xff0c;太贵了&#xff0c;实在买不起。然后就搜索到了小米的这款米兔儿童机器人&#xff0c;性能上能达到乐高95%以上&#xff0c;价格却只有八分之一&#xff0c;果断…

网站开发用什么语言好_网站开发教程:企业如何用网站开启在线业务?

用网站来开启互联网在线业务是很好的方法&#xff0c;对于创业型企业来说&#xff0c;进行自己的企业网站开发制作能够加快实现品牌业务目标。下面这个教程将会教你如何开展在线业务、并利用网站来扩大业务&#xff01;1.确定目标市场创业团队需要明确自己的目标市场&#xff0…

c语言字符指针初始化赋值,C语言_指针变量的赋值与运算,很详细详解

指针变量的赋值指针变量同普通变量一样&#xff0c;使用之前不仅要定义说明&#xff0c; 而且必须赋予具体的值。未经赋值的指针变量不能使用&#xff0c; 否则将造成系统混乱&#xff0c;甚至死机。指针变量的赋值只能赋予地址&#xff0c; 决不能赋予任何其它数据&#xff0c…

ospf工作原理_OSPF动态路由配置经典案例

前导知识点&#xff1a;静态路由结合上一讲讲解的距离矢量路由协议&#xff0c;本讲我们讲解链路状态路由协议----OSPF&#xff0c;相比较于RIP&#xff0c;OSPF能够支持大型网络&#xff0c;下面列出RIP和OSPF的对比图&#xff0c;进一步说明了OSPF的强大。RIP最多支持15台路由…