`
changhongbao
  • 浏览: 122479 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Gradle入门系列(2):第一个Java项目

 
阅读更多

这篇教程的主要内容是讲解如何用Gradle编译和打包一个简单的Java项目。

该Java项目只有一个需求:我们的构建脚本必须创建一个可执行的Jar文件,换句话说,我们必须能够使用命令java -jar jarfile.jar 来运行我们的程序。我们来看一下如何满足这个需求。

创建一个Java项目

我们可以使用Java插件(译注:关于Gradle插件的定义,请查看第一篇教程)来创建一个Java项目,为了做到这点,我们需要把下面这段语句加入到build.gradle文件中:

1
apply plugin: 'java'

就是这样,现在我们已经创建了一个Java项目。Java插件会在我们的构建中添加一些新的约定(如默认的项目结构),新的任务,和新的属性。
让我们来快速地看一下默认的项目结构。

Java项目结构

默认的项目结构如下:

  • src/main/java目录包含了项目的源代码。
  • src/main/resources目录包含了项目的资源(如属性文件)。
  • src/test/java目录包含了测试类。
  • src/test/resources目录包含了测试资源。所有我们构建生成的文件都会在build目录下被创建,这个目录涵盖了以下的子目录,这些子目录我们会在这篇教程中提到,另外还有一些子目录我们会放在以后讲解。
  • classes目录包含编译过的.class文件。
  • libs目录包含构建生成的jarwar文件。

为构建加入一个主类(main class)

让我们创建一个简单的主类,在这个类中会打印一个“Hello world”然后System.out出来。这个HelloWorld类的源代码如下:

1
2
3
4
5
6
7
8
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插件在我们的构建中加入了很多任务,我们这篇教程涉及到的任务如下:

  • assemble任务会编译程序中的源代码,并打包生成Jar文件,这个任务不执行单元测试。
  • build任务会执行一个完整的项目构建。
  • clean任务会删除构建目录。
  • compileJava任务会编译程序中的源代码。

我们还可以执行以下命令得到一个可运行任务及其描述的完整列表

1
gradle tasks

这是一个很好的方式,不需要阅读构建脚本,就能对你的项目进行大致的浏览,如果我们在项目根目录下运行这个命令,我们可以看到以下输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
> 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 SUCCESSFUL
 
Total time: 2.792 secs

我们继续,下面要讲怎样打包我们的项目。

打包我们的项目

我们可以通过使用两个不同的任务来打包项目。
如果我们在命令提示符中执行命令gradle assemble,我们可以看到以下输出:

1
2
3
4
5
6
7
8
9
10
> gradle assemble
:compileJava
:processResources
:classes
:jar
:assemble
 
BUILD SUCCESSFUL
 
Total time: 3.163 secs

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
> gradle build
:compileJava
:processResources
:classes
:jar
:assemble
:compileTestJava
:processTestResources
:testClasses
:test
:check
:build
 
BUILD SUCCESSFUL
 
Total time: 3.01 secs

这些命令的输出表明了它们的区别:

  • assemble任务仅仅执行项目打包所必须的任务集。
  • build任务执行项目打包所必须的任务集,以及执行自动化测试。这两个命令都会在build/libs目录中创建一个file-java-project.jar文件。默认创建的Jar文件名称是由这个模版决定的:[projectname].jar,此外,项目的默认名称和其所处的目录名称是一致的。因此如果你的项目目录名称是first-java-project,那么创建的Jar文件名称就是first-java-project.jar。

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

1
java -jar first-java-project.jar

我们可以看到以下输出:

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

问题出在,我们没有在manifest文件中配置Jar文件的主类,让我们继续看看怎样解决这个问题。

配置Jar文件的主类

Java插件在我们的项目中加入了一个Jar任务,每一个Jar对象都一个manifest属性,这个属性是Manifest的一个实例。

我们可以对生成的Jar文件的主类进行配置,使用Manifest接口的attributes()方法。换句话说,我们可以使用一个包含键值对的map结构指定加入到manifest文件的属性集。

我们能够通过设置Main-Class属性的值,指定我们程序的入口点。在我们对build.gradle文件进行必要的改动后,代码如下:

1
2
3
4
5
6
7
apply plugin: 'java'
 
jar {
    manifest {
        attributes 'Main-Class': 'net.petrikainulainen.gradle.HelloWorld'
    }
}

JavaSE教程提供了关于manifest文件的更多信息。)
在我们执行gradle assemblegradle build命令生成一个新的jar文件之后,我们可以执行以下命令运行jar文件:

1
java -jar first-java-project.jar

当我们运行程序时,System.out会打印出以下信息:

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

这就是我们今天所有的内容,我们看一下我们学到了什么。

总结

我们已经通过Gradle创建了一个简单的Java项目,这篇教程教会了我们四点:

  • 我们了解了可以使用Gradle的Java插件创建一个Java项目。
  • 我们知道了Java项目的默认结构和Maven项目的默认结构是一样的。
  • 我们知道了构建所生成的所有文件都能在build目录下找到。
  • 我们知道了我们可以自定义加入到manifest文件中的属性。

P.S. 这篇教程的示例代码可以在Github找到。

分享到:
评论

相关推荐

    netty-with-gradle:带有 gradle 构建和持续性能测试的演示项目

    netty-with-gradle 带有 Gradle 构建系统和连续性能单元测试 (CPUT) 的... Gradle 入门:我们的第一个 Java 项目 Gradle 用户指南 幻灯片: Eclipse 插件: 图书: Gradle 超越基础 视频: Gradle善良:http:

    gradle Demo

    【Gradle Demo】是一个以Gradle构建系统的简单示例项目,旨在帮助初学者理解如何在IntelliJ IDEA中设置和运行一个基本的“Hello World”程序。Gradle是一款流行的、基于任务驱动的开源构建自动化工具,它允许开发者...

    Java Spring 入门例子和代码

    Java Spring 入门例子和代码 第1章:Spring 框架简介 Spring 是一个开源的Java平台,它提供了全面的基础设施支持,以便你可以专注于你的业务逻辑。...第3章:第一个Spring Boot应用程序 // Application.java pack

    gradle-4-2.7-rc-2.zip

    在标题"gradle-4-2.7-rc-2.zip"中,我们看到的是Gradle的4.2.7版本的一个候选发布版(Release Candidate),RC-2意味着这是该版本的第二个候选版本,通常会在正式版本发布前进行测试,以确保其稳定性和兼容性。这个...

    Java Web从入门到精通光盘源码1-15

    2. **Java EE**:Java企业版(Java EE)是Java Web开发的平台,包含了一系列API和服务,如Java Servlet、JSP、JSTL、EJB(Enterprise JavaBeans)、JPA(Java Persistence API)等,用于构建分布式、多层的企业级...

    spring boot入门的第一个项目

    **Spring Boot 入门项目详解** ...通过理解并实践上述知识点,你就能顺利地创建并运行你的第一个Spring Boot项目。在微服务和分布式系统的大背景下,Spring Boot更是如鱼得水,帮助开发者构建高效、稳定的系统。

    Gradle in Action

    ### 第一部分:Gradle入门 1. **项目自动化介绍**:阐述了自动化构建的概念和Gradle在其中扮演的角色。同时也介绍了一些构建的基础知识和自动化构建的益处。 2. **下一代构建工具Gradle**:探索了Gradle的核心特性,...

    Java基础入门教程.pdf 以下是一个简单的Java基础入门教程

    2. 编写第一个 Java 程序:学习如何创建一个简单的 Java 程序,例如 "HelloWorld" 程序,并了解基本语法。 3. 基本语法:学习变量和数据类型、运算符、条件语句和循环的使用。 4. 函数与方法:学习如何声明和调用...

    Java编程入门第1章测验Java开发Java经验技巧共2

    其中包含的"Java编程入门第1章测验"部分,旨在帮助学习者检验和巩固他们在学习Java编程第一章节后的理解程度。 在Java编程的初级阶段,理解基础语法和概念至关重要。这包括但不限于: 1. **Java环境搭建**:学习...

    gradle-3.3-all.zip

    1. `getting-started.html`: 这是Gradle的入门指南,通常包含如何设置环境、创建第一个项目以及执行基本构建任务的步骤。对于初学者来说,这是一个很好的起点,可以帮助快速理解Gradle的工作原理。 2. `LICENSE`: ...

    Java Web从入门到精通光盘18-21

    【Java Web从入门到精通光盘18-21】是一个涵盖了Java Web开发基础到进阶的教程资源,旨在帮助初学者系统学习并掌握这一领域。在这个光盘中,你可能会遇到一系列关于Web应用程序开发的知识点,包括但不限于以下内容:...

    最新 gradle-4.5.1-all.zip 官方版下载

    Gradle 是一个强大的构建自动化工具,广泛用于Java和其他 JVM 语言的项目,提供了一种声明式的构建配置方式,使得构建过程更加灵活和高效。在提到的`gradle-4.5.1-all.zip`官方版下载中,包含了多个重要组成部分,...

    gradle user

    **Gradle** 是一种基于 Java 的项目自动化构建工具,采用 Groovy 或 Kotlin DSL(领域特定语言)来编写构建脚本,支持增量编译和依赖管理,是目前 Java 项目中最流行的构建工具之一。 ##### 特点: - **灵活性**:...

Global site tag (gtag.js) - Google Analytics