• Java 编译打包命令


    背景

    我们有的时候总是要使用将自己写的工程编译成 class 文件,同时打包成 jar,虽然有各种工具可以帮助我们,但是毕竟掌握使用 java 本来的命令去做这些更灵活

    编译

    比如我要编译包名为 com.demo,全称为 com.demo.Main 的这个类,同时将生成的文件指定到当前目录下的 bin 文件夹下,那么在么做呢?

    Main.java 内容:

    1 package com.demo;
    2 public class Main{
    3 
    4 public static void main(String[] argvs){
    5   System.out.println("-------****Hello world!***-------");
    6 }
    7 
    8 }

    由于编译的类是有包名的,所以必须在工作目录下创建包名对应的文件夹,将源码放在对应文件夹下,如果不这么做会找不到这个类,然后执行 javac 命令

    1 mkdir bin #创建输出目录
    2 javac com/demo/Main.java -d bin #会在 bin 文件夹下生成 com/demo/Main.class 文件 

    打包

    打包 bin 文件夹下所有资源到 jar 包

    1 touch bin/property.pro 
    2 jar -cvfm main.jar mymanifest -C bin .#这里 mymanifest 对应 m 选项,会将 mymanifset 合并到 jar 中的 META-INF/MANIFEST.MF,也就是跟新清单配置文件了,-C 后面指定要打包的目录 (编译的时候没有这么方便) 注意目录后面的 . 代表所有文件
    3 #最终会在当前工作目录下生成一个 main.jar 包文件,里面包括 bin 下的所有文件

    更新 jar 包内容

    1 mkdir res
    2 touch res/map.property
    3 jar -uvf main.jar res/map.property #此时如果解压 jar 包,会发现生成了 res 目录,同时目录下有 map.property 文件,当然如果文件之前已经存在, 那么这个文件会被更新
    4 #jar -uvfm main.jar manifest 如果要跟新清单文件要用 m 选项

    解压

    jar -xvf main.jar #会在当前目录下解压 main.jar 包,注意不能指定解压路径

    运行

    1 java -jar main.jar #java -classpath main.jar com.demo.Main 
    2 #输出 
    3 -------****Hello world!***-------

    参考

     1 javac
     2 
     3 用法: javac <options> <source files>
     4 其中, 可能的选项包括:
     5   -g                         生成所有调试信息
     6   -g:none                    不生成任何调试信息
     7   -g:{lines,vars,source}     只生成某些调试信息
     8   -nowarn                    不生成任何警告
     9   -verbose                   输出有关编译器正在执行的操作的消息
    10   -deprecation               输出使用已过时的 API 的源位置
    11   -classpath <路径>            指定查找用户类文件和注释处理程序的位置
    12   -cp <路径>                   指定查找用户类文件和注释处理程序的位置
    13   -sourcepath <路径>           指定查找输入源文件的位置
    14   -bootclasspath <路径>        覆盖引导类文件的位置
    15   -extdirs <目录>              覆盖所安装扩展的位置
    16   -endorseddirs <目录>         覆盖签名的标准路径的位置
    17   -proc:{none,only}          控制是否执行注释处理和/或编译。
    18   -processor <class1>[,<class2>,<class3>...] 要运行的注释处理程序的名称; 绕过默认的搜索进程
    19   -processorpath <路径>        指定查找注释处理程序的位置
    20   -parameters                生成元数据以用于方法参数的反射
    21   -d <目录>                    指定放置生成的类文件的位置
    22   -s <目录>                    指定放置生成的源文件的位置
    23   -h <目录>                    指定放置生成的本机标头文件的位置
    24   -implicit:{none,class}     指定是否为隐式引用文件生成类文件
    25   -encoding <编码>             指定源文件使用的字符编码
    26   -source <发行版>              提供与指定发行版的源兼容性
    27   -target <发行版>              生成特定 VM 版本的类文件
    28   -profile <配置文件>            请确保使用的 API 在指定的配置文件中可用
    29   -version                   版本信息
    30   -help                      输出标准选项的提要
    31   -A关键字[=值]                  传递给注释处理程序的选项
    32   -X                         输出非标准选项的提要
    33   -J<标记>                     直接将 <标记> 传递给运行时系统
    34   -Werror                    出现警告时终止编译
    35   @<文件名>                     从文件读取选项和文件名
    javac
     1 jar
     2 
     3 用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
     4 选项:
     5     -c  创建新档案
     6     -t  列出档案目录
     7     -x  从档案中提取指定的 (或所有) 文件
     8     -u  更新现有档案
     9     -v  在标准输出中生成详细输出
    10     -f  指定档案文件名
    11     -m  包含指定清单文件中的清单信息
    12     -n  创建新档案后执行 Pack200 规范化
    13     -e  为捆绑到可执行 jar 文件的独立应用程序
    14         指定应用程序入口点
    15     -0  仅存储; 不使用任何 ZIP 压缩
    16     -P  保留文件名中的前导 '/' (绝对路径) 和 ".." (父目录) 组件
    17     -M  不创建条目的清单文件
    18     -i  为指定的 jar 文件生成索引信息
    19     -C  更改为指定的目录并包含以下文件
    20 如果任何文件为目录, 则对其进行递归处理。
    21 清单文件名, 档案文件名和入口点名称的指定顺序
    22'm', 'f''e' 标记的指定顺序相同。
    23 
    24 示例 1: 将两个类文件归档到一个名为 classes.jar 的档案中: 
    25        jar cvf classes.jar Foo.class Bar.class 
    26 示例 2: 使用现有的清单文件 'mymanifest'27            将 foo/ 目录中的所有文件归档到 'classes.jar' 中: 
    28        jar cvfm classes.jar mymanifest -C foo/ .
    jar
     1 java
     2 
     3 用法: java [-options] class [args...]
     4            (执行类)
     5    或  java [-options] -jar jarfile [args...]
     6            (执行 jar 文件)
     7 其中选项包括:
     8     -d32      使用 32 位数据模型 (如果可用)
     9     -d64      使用 64 位数据模型 (如果可用)
    10     -server      选择 "server" VM
    11                   默认 VM 是 server,
    12                   因为您是在服务器类计算机上运行。
    13 
    14 
    15     -cp <目录和 zip/jar 文件的类搜索路径>
    16     -classpath <目录和 zip/jar 文件的类搜索路径>
    17                   用 : 分隔的目录, JAR 档案
    18                   和 ZIP 档案列表, 用于搜索类文件。
    19     -D<名称>=<值>
    20                   设置系统属性
    21     -verbose:[class|gc|jni]
    22                   启用详细输出
    23     -version      输出产品版本并退出
    24     -version:<值>
    25                   警告: 此功能已过时, 将在
    26                   未来发行版中删除。
    27                   需要指定的版本才能运行
    28     -showversion  输出产品版本并继续
    29     -jre-restrict-search | -no-jre-restrict-search
    30                   警告: 此功能已过时, 将在
    31                   未来发行版中删除。
    32                   在版本搜索中包括/排除用户专用 JRE
    33     -? -help      输出此帮助消息
    34     -X            输出非标准选项的帮助
    35     -ea[:<packagename>...|:<classname>]
    36     -enableassertions[:<packagename>...|:<classname>]
    37                   按指定的粒度启用断言
    38     -da[:<packagename>...|:<classname>]
    39     -disableassertions[:<packagename>...|:<classname>]
    40                   禁用具有指定粒度的断言
    41     -esa | -enablesystemassertions
    42                   启用系统断言
    43     -dsa | -disablesystemassertions
    44                   禁用系统断言
    45     -agentlib:<libname>[=<选项>]
    46                   加载本机代理库 <libname>, 例如 -agentlib:hprof
    47                   另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
    48     -agentpath:<pathname>[=<选项>]
    49                   按完整路径名加载本机代理库
    50     -javaagent:<jarpath>[=<选项>]
    51                   加载 Java 编程语言代理, 请参阅 java.lang.instrument
    52     -splash:<imagepath>
    53                   使用指定的图像显示启动屏幕
    54 有关详细信息, 请参阅 http://www.oracle.com/technetwork/java/javase/documentation/index.html。
    java
  • 相关阅读:
    分布式并行计算MapReduce
    备份
    【爬虫综合作业】猫眼电影TOP100分析
    爬取全部的校园新闻
    获取一篇新闻的全部信息
    爬虫原理
    中文词频统计
    复合数据类型,英文词频统计
    字符串、文件操作,英文词频统计预处理
    期末大作业
  • 原文地址:https://www.cnblogs.com/zhangyan-2015/p/6287743.html
Copyright © 2020-2023  润新知