这篇博客文章描述了如何使用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

Gradle入门:我们的第一个Java项目相关推荐

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

    java gradle入门 这篇博客文章描述了如何使用Gradle编译和打包一个简单的Java项目. 我们的Java项目只有一个要求: 我们的构建脚本必须创建一个可执行的jar文件. 换句话说,我们必 ...

  2. Gradle入门:创建Web应用程序项目

    这篇博客文章描述了如何使用Gradle创建一个Web应用程序项目. 更具体地说,我们想创建一个使用Java的Web应用程序项目,将我们的Web应用程序打包到WAR文件中,并在开发环境中运行我们的Web ...

  3. idea怎样创建一个java项目?

    idea创建java项目的方法:首先在电脑上打开idea,并依次点击"File->New->Project";然后选择JDK安装的路径,并点击New;接着创建一个简单的 ...

  4. 初学者如何吃透一个Java项目

    不少初学者朋友在学习Java过程中,会对着视频敲Java项目,其中遇到的BUG还能解决,但就是每次敲完一个项目,就感觉很空虚,项目里面的知识点感觉懂了但又好像没懂 这些朋友应该怎样才能掌握一个项目所用 ...

  5. 如何使用eclipse软件创建一个Java项目?

    同学们在参加Java的时候老师肯定会教给你们如何去创建一个项目,这里怕有些同学没记住,所以单独为大家分享一篇如何使用eclipse软件创建一个Java项目教程,感觉有用的话收藏转发一下~ eclips ...

  6. eclipse怎么导入一个Java项目(莫要错过,最详细教程!)

    导出项目教程链接-->传送门 对于eclipse软件,常规的打开文件方法是无法打开一个项目的, 那么怎样导入一个java项目呢?方法如下 第一步 在电脑打开eclipse软件,点击file-&g ...

  7. 创建一个java项目

    新建一个java项目 创建一个java项目 使用MyEclipse 新建项目 文件>新建>java项目 项目名称与存放路径 如果弹出此项,选择yes 项目创建成功 界面的效果 项目目录中的 ...

  8. Maven创建第一个java项目(官方教程)

    翻译自:链接 Building Java Projects with Maven This guide walks you through using Maven to build a simple ...

  9. 完成我的第一个java项目“评标人才库管理系统”——环境配置+创项目

    完成我的第一个java项目"评标人才库管理系统"--环境配置+创项目 idea配置maven环境 创建第一个Spring项目 idea配置maven环境 1.下载maven htt ...

最新文章

  1. 《易学Python》——1.8 总结
  2. SQLAlchemy之SQL Expression
  3. leetcode-Symmetric Tree 对称树
  4. mysql 视图操作和存储过程
  5. centos7 安装SSH
  6. xml-apis-ext.jar
  7. matlab用实时脚本编写函数,matlab中关于函数文件和脚本文件使用实例(转载)
  8. 短视频网站源码干货分享:如何实现背景音乐和美颜功能
  9. win10千万不要重置_小白不要再用“一键重装系统”了,后果很严重!
  10. CrossApp的环境配置教程Windowsmac
  11. 淘宝API 搜索相似的商品
  12. pfSense软路由防火墙
  13. moba寻路_Dota2小技巧:从小兵仇恨到寻路机制
  14. 树莓派 更换键盘 2020_魔改售价2000多元的HHKB键盘!蓝牙双模+外接TF卡+树莓派ZERO...
  15. 苹果8黑屏无法强制开机_iPhone黑屏转圈圈,无法开机解决方法
  16. FX5u控制4个伺服,一个完整的项目 回原点、JOG手动、绝对定位、相对定位、控制等部分
  17. SAP JCo Standalone版本
  18. 如何两周学会Python 第00天
  19. wechat-0050,微信公众号,带参数的二维码获取与扫码事件推送
  20. JavaLeetCode 初入门——009. 回文数

热门文章

  1. 153. 寻找旋转排序数组中的最小值---LeetCode---JAVA
  2. JAVA注解和反射(笔记)
  3. c语言程序为什么运行一半就自动关闭了,C语言为什么程序运行一半就出现停止工作...
  4. ReviewForJob——java虚拟机的垃圾回收策略(个人总结)
  5. spring boot示例_Spring Boot完成示例
  6. rxjava 并行_使用RxJava和Completable并行执行阻塞任务
  7. java 性能调优_Java性能调优调查结果(第二部分)
  8. Spring再次涵盖了您:继续进行消费者驱动的消息传递合同测试
  9. 初始化创建画布_使用HTML5,画布和开放数据创建全球降水(雨)可视化
  10. java运行构建期间出错_构建和运行Java 8支持