zoukankan      html  css  js  c++  java
  • Java 命令行 编译、执行、打包

    Java 命令行 编译、执行、打包

    一般来说 IDE 或项目管理工具打包很方便。
    我遇到了不能使用任何开发工具的情况,简单记录一下相关操作,不做深入探讨。

    环境

    linux
    jdk 1.8
    

    简单的编译执行

    # 测试目录
    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");
        }
    }
    

    看下目录结构

    编译,生成 class 文件

    javac src/com/demo/Hello.java
    

    下面的截图可以看到,在 java 文件同级目录,生成了 class 文件

    执行

    # -cp src 这个参数是把 src 目录添加到 classpath 目录
    java -cp src com.demo.Hello
    

    打包

    打包只应当包含 .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"}
    
  • 相关阅读:
    波段是金牢记六大诀窍
    zk kafka mariadb scala flink integration
    Oracle 体系结构详解
    图解 Database Buffer Cache 内部原理(二)
    SQL Server 字符集介绍及修改方法演示
    SQL Server 2012 备份与还原详解
    SQL Server 2012 查询数据库中所有表的名称和行数
    SQL Server 2012 查询数据库中表格主键信息
    SQL Server 2012 查询数据库中所有表的索引信息
    图解 Database Buffer Cache 内部原理(一)
  • 原文地址:https://www.cnblogs.com/eoalfj/p/12332808.html
Copyright © 2011-2022 走看看