• 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"}
    
  • 相关阅读:
    1.线程是什么?
    eclipse新手知识点1
    《图解Java多线程设计模式》UML用什么软件画?
    Microsoft SQL Server 2008完整+差异备份及还原实战
    xcopy
    导入EXCEL到数据库表中的步骤:
    js判断一个值是空的最快方法是不是if(!value){alert("这个变量的值是null");}
    Pytorch1.6.0 Nvidia Jetson TX2
    python所有的print就会自动打印到log.txt
    python import numpy right but import caffe wrong
  • 原文地址:https://www.cnblogs.com/eoalfj/p/12332808.html
Copyright © 2020-2023  润新知