当前位置: 首页 > news >正文

使用Gradle第一次构建Java程序

目录结构

│  build.gradle
└─src
    └─main
        └─java
            └─com
                └─manning
                    └─gia
                        └─todo
                            │  ToDoApp.java
                            │
                            ├─model
                            │      ToDoItem.java
                            │
                            ├─repository
                            │      InMemoryToDoRepository.java
                            │      ToDoRepository.java
                            │
                            └─utils
                                    CommandLineInput.java
                                    CommandLineInputHandler.java

build.gradle

//使用 Java 插件
//默认在 src/main/java下查找源代码
apply plugin: 'java'

执行构建命令

www.coderknock.com$ gradle build
Starting a Gradle Daemon, 1 incompatible and 1 stopped Daemons could not be reused, use --status for details
//编译 Java 代码
:compileJava    
//处理资源【将 src/main/resource 下文件拷贝到 classes 此处没有该文件夹所以被标记为 NO-SOURCE】
:processResources NO-SOURCE
:classes
//打 jar 包
:jar
:assemble
//编译 Java 测试代码
:compileTestJava NO-SOURCE
//处理测试资源【将 src/test/resource 下文件拷贝到 classes 此处没有该文件夹所以被标记为 NO-SOURCE】
:processTestResources NO-SOURCE
:testClasses UP-TO-DATE
//进行单元测试
:test NO-SOURCE
:check UP-TO-DATE
:build

BUILD SUCCESSFUL

Total time: 13.767 secs

每一行都是 Java 插件提供的一个可执行任务,UP-TO-DATE 代表任务被跳过。

编译之后

│  build.gradle
│
├─.gradle
│  ├─3.4
│  │  ├─file-changes
│  │  │      last-build.bin
│  │  │
│  │  ├─fileContent
│  │  │      fileContent.lock
│  │  │
│  │  └─taskHistory
│  │          fileHashes.bin
│  │          fileSnapshots.bin
│  │          taskHistory.bin
│  │          taskHistory.lock
│  │
│  └─buildOutputCleanup
│          built.bin
│          cache.properties
│          cache.properties.lock
│
├─build
│  ├─classes  【此目录即编译的 Java 的 class 文件的目录】
│  │  └─main
│  │      └─com
│  │          └─manning
│  │              └─gia
│  │                  └─todo
│  │                      │  ToDoApp.class
│  │                      │
│  │                      ├─model
│  │                      │      ToDoItem.class
│  │                      │
│  │                      ├─repository
│  │                      │      InMemoryToDoRepository.class
│  │                      │      ToDoRepository.class
│  │                      │
│  │                      └─utils
│  │                              CommandLineInput.class
│  │                              CommandLineInputHandler$1.class
│  │                              CommandLineInputHandler.class
│  │
│  ├─libs
│  │      Project.jar 【打包的 jar 包,名称是项目的目录名】
│  │
│  └─tmp 【打 jar 包时使用的临时文件】
│      ├─compileJava
│      └─jar
│              MANIFEST.MF
│
└─src
    └─main
        └─java
            └─com
                └─manning
                    └─gia
                        └─todo
                            │  ToDoApp.java
                            │
                            ├─model
                            │      ToDoItem.java
                            │
                            ├─repository
                            │      InMemoryToDoRepository.java
                            │      ToDoRepository.java
                            │
                            └─utils
                                    CommandLineInput.java
                                    CommandLineInputHandler.java

运行项目

www.coderknock.com$ 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
> i
Please enter the name of the item:
> test
Successfully inserted to do item with ID 1.

--- 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
> a
1: test [completed: false]

--- 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
> exit
Please select a valid option!

--- 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
> e

再来运行下 jar

www.coderknock.com$ java -jar Project.jar
Project.jar中没有主清单属性

我们发现没有正确运行,下这是因为,我们没有在构建脚本中申明要生成清单文件MANIFEST.MF 下面我们来修改一下相关的配置。

//使用 Java 插件
//默认在 src/main/java下查找源代码
apply plugin: 'java'
//定义项目的版本
version = 0.1
//设置 Java 兼容版本
sourceCompatibility = 1.8
//jar 包相关配置
jar {
    //清单文件配置
    manifest {
        //启动类
        attributes 'Main-Class': 'com.manning.gia.todo.ToDoApp'
    }
}

再次编译完成后,build/lib 目录下的 jar 包名为 Project-0.1.jar

www.coderknock.com$ java -jar Project-0.1.jar

--- 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

可以看到,jar 包可以正常运行。

相关代码

相关文章:

  • 深入认识CSS的行内元素
  • PHP Smarty template for website
  • 网络中数据传输过程的分析
  • BIO、NIO和AIO的区别(简明版)
  • JavaScript-基础入门.0008.JavaScript作用范围
  • 《微信公众平台开发》图书介绍
  • PE分析
  • 判断用户名是否正确
  • loadrunner中Windows Resource没有数据或不可用
  • vue-todolist-example学习
  • javaScript事件(八)事件类型之变动事件
  • 白话机器学习
  • JavaScript的异步运行机制
  • 嵌入式软件设计第7次实验报告
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • JavaScript-如何实现克隆(clone)函数
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【React系列】如何构建React应用程序
  • Android优雅地处理按钮重复点击
  • Centos6.8 使用rpm安装mysql5.7
  • export和import的用法总结
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • MobX
  • MySQL数据库运维之数据恢复
  • php ci框架整合银盛支付
  • spring + angular 实现导出excel
  • 读懂package.json -- 依赖管理
  • 对象管理器(defineProperty)学习笔记
  • 飞驰在Mesos的涡轮引擎上
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 前端技术周刊 2019-02-11 Serverless
  • 前端路由实现-history
  • 实现菜单下拉伸展折叠效果demo
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​第20课 在Android Native开发中加入新的C++类
  • #HarmonyOS:Web组件的使用
  • #include
  • #QT(智能家居界面-界面切换)
  • %check_box% in rails :coditions={:has_many , :through}
  • (Matlab)使用竞争神经网络实现数据聚类
  • (ZT)薛涌:谈贫说富
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转载)CentOS查看系统信息|CentOS查看命令
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .NET Core Web APi类库如何内嵌运行?
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • .Net中间语言BeforeFieldInit
  • .net中应用SQL缓存(实例使用)
  • @RequestMapping用法详解
  • [2010-8-30]
  • [2016.7.Test1] T1 三进制异或
  • [20180224]expdp query 写法问题.txt