Java 命令行 编译、执行、打包
Java 命令行 编译、执行、打包
一般来说 IDE 能够很方便的编译打包。
我写这篇文章是遇到了不能使用 IDE 的情况,简单记录一下,不做深入探讨。
环境
linux
jdk 1.8
简单的编译执行
# 创建演示目录
mkdir -p /usr/local/mytest
# 创建代码目录
mkdir -p /usr/local/mytest/src
# 创建代码包路径
mkdir -p /usr/local/mytest/src/com/demo
# 进入演示目录
cd /usr/local/mytest
创建文件 src/com/demo/Hello.java:
package com.demo;
public class Hello {
public static void main(String[] args) {
System.out.println("hello");
}
}
最终,mytest 目录下的结构

编译
javac src/com/demo/Hello.java

可以看到生成了 src/com/demo/Hello.class
执行
java -cp src com.demo.Hello

-cp src 这个参数是把 src 目录添加到 classpath 目录
打包
打包只应当包含 .class 文件,所以需要创建一个目录,用来专门存放 .class 文件
mkdir /usr/local/mytest/target
编译
# -d target 参数,指定 class 文件生成在 target 目录
javac src/com/demo/Hello.java -d target

看一下 target 目录下生成了 .class 文件
打包
# -C target . 参数,指定把 target 目录下的所有文件打包
jar -cvf my.jar -C target .
执行
java -jar my.jar

报错了,这是正常的,因为我们没有指定入口,java 不知道应该执行什么。
正确的执行方式
# -cp my.jar 把 jar 包添加到 classpath 目录
# com.demo.Hello 说明哪个类是入口
java -cp my.jar com.demo.Hello
可执行的 jar 包
可以直接执行,无需指定入口
创建 /usr/local/mytest/MANIFEST.MF,在文件内说明程序入口:
Main-Class: com.demo.Hello
再次打包
# 添加了 m 参数,指定 MANIFEST.MF,这个文件的内容会被添加到 jar 包的清单,用于说明 my.jar 的入口
jar -cvfm my.jar MANIFEST.MF -C target .
执行
java -jar my.jar
成功输出 hello
依赖第三方 jar 包的 java 代码的编译执行
创建文件 src/com/demo/HelloGson.java,这个代码依赖 gson 包:
package com.demo;
import com.google.gson.Gson;
import java.util.HashMap;
import java.util.Map;
public class HelloGson {
public static void main(String[] args) {
Gson gson = new Gson();
Map<String, String> map = new HashMap<String, String>();
map.put("key1", "value1");
map.put("key2", "value2");
String json = gson.toJson(map);
System.out.println(json);
}
}
直接编译:
javac src/com/demo/HelloGson.java -d target
理所当然的报错 error: package com.google.gson does not exist,依赖包不存在
创建 libs 目录,把依赖包 gson-2.8.5.jar 放进去,最后整个目录结构如下:

再次编译,使用 -cp libs/gson-2.8.5.jar 参数添加依赖包:
javac -cp libs/gson-2.8.5.jar src/com/demo/HelloGson.java -d target
编译成功,生成 HelloGson.class 文件:

执行:
java -cp target com.demo.HelloGson
报错 java.lang.ClassNotFoundException: com.google.gson.Gson 还是缺少依赖。
执行时也需把 libs/gson-2.8.5.jar 添加到 classpath 路径中:
java -cp target:libs/gson-2.8.5.jar com.demo.HelloGson
成功输出:
{"key1":"value1","key2":"value2"}
Java 命令行 编译、执行、打包的更多相关文章
- java命令行编译执行
- Linux java 命令行编译 jar包
Java 命令行编译成class,然后在打包成jar文件. 编译成class javac -classpath $CLASS_PATH -d class ./src/Hello.java 可以通过ja ...
- Java 命令行编译项目
如果是用Exlipse, 第三方的包可以放在eclipse文件夹的jre包的lib文件夹中! (初学者的一些总结-高手们勿喷哈-) 原因: 以前一直用Eclispe编程环境运行Java.非常舒服,就像 ...
- java命令行编译运行、打包jar
过程:java文件→class文件→exe执行文件 --------------------------------------------- 一.编译:从.java生成.class (1)ecl ...
- 命令行编译执行java
命令行编译运行java程序 使用命令 javac进行编译 和 java进行执行. javac 后面跟着的是java文件的文件名,例如 HelloWorld.java. 该命令用于将 java 源文件编 ...
- Android 命令行编译、打包生成apk文件
一.搭建搭建环境 1. 安装JDK 和 Android SDK 2. 配置环境变量 D:\android-sdk-windows\tools C:\Program Files\Java\jdk1. ...
- Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包
一,实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path-.将依赖包添加到工程中后,eclipse不报错了.但是用Maven命令 mv ...
- Java命令行的执行参数
Java 程序命令行参数说明 启动Java程序的方式有两种: # starts a Java virtual machine, loads the specified class, and invok ...
- java 命令行 编译 运行程序
学习java使用IDE前最好先用用命令行的javac.java来跑一跑简单的程序,这样能够熟悉一下包管理对.class文件路径的影响. 我们先写一段简单的代码: package com.csdn.lk ...
随机推荐
- linux专题(四):常用的基本命令(二)基本属性
看懂文件属性 Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限.为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定. 在Li ...
- bzoj4716假摔
bzoj4716假摔 题意: 给出一个矩阵,求这个矩阵中权值和第k小的长在xmin到n之间,宽在ymin到m之间的子矩阵.n,m≤1000,k≤250000. 题解: 首先求出长为xmin,宽为ymi ...
- Docker基础使用
Docker篇 CentOS 安装Docker - 菜鸟教程 安装须知: 1.Docker支持以下的CentOS版本: CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更 ...
- http连接池存在的问题
连接的有效性检测是所有连接池都面临的一个通用问题,大部分HTTP服务器为了控制资源开销,并不会 永久的维护一个长连接,而是一段时间就会关闭该连接.放回连接池的连接,如果在服务器端已经关闭,客 户端是无 ...
- nginx: command not found
nginx 正常启动,可以访问服务器地址:welcome to nginx 使用nginx -t 等命令时 报错:nginx: command not found 这是环境变量未配置 配置环境变量 v ...
- WYT的刷子
WYT的刷子 题目描述 WYT有一把巨大的刷子,刷子的宽度为M米,现在WYT要使用这把大刷子去粉刷有N列的栅栏(每列宽度都为1米:每列的高度单位也为米,由输入数据给出). 使用刷子的规则是: 与地面垂 ...
- BT面板安装教程
面板特点 一键配置服务器环境(LAMP/LNMP) 一键安全重启 一键创建管理网站.ftp.数据库 一键配置(定期备份.数据导入.伪静态.301.SSL.子目录.反向代理.切换PHP版本) 一键安装常 ...
- sqlserver安装出现找不到数据库引擎错误
sqlserver安装出现找不到数据库引擎错误 问题的解决 第一次安装SQL server,发现它较于Oracle,都有安装卸载十分麻烦的特点.刚开始安装,就让我频繁遇到这个“找不到数据库引擎”的错误 ...
- 循序渐进nginx(二):反向代理、负载均衡、缓存服务、静态资源访问
目录 反向代理 使用 1.创建代理目标服务端: 2.配置nginx反向代理目标服务端: 3.测试使用: 负载均衡 使用 1.准备服务端 2.修改nginx配置 3.测试 负载均衡策略 负载均衡的额外参 ...
- MySQL(一)简介与入门
一.数据库简介 这个博客详细介绍:http://www.cnblogs.com/progor/p/8729798.html 二.MySQL的安装 这个博客详细介绍:https://blog.csdn. ...