mac笔记本使用javac,java,jar命令组织大规模应用2

这篇博客介绍了在Mac环境下,如何使用javac、java和jar命令来组织和管理大规模的Java应用程序。详细阐述了javac编译、java运行、jar打包的过程,包括创建、查看、解压jar文件的各种操作,以及Manifest.mf文件的编写规则和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

java源代码

package com.yw.test02;

import java.io.FileReader;
import java.io.PrintWriter;

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVPrinter;
import org.apache.commons.csv.CSVRecord;

public class CSVTest {
	public static void main(String[] args) {
		CSVTest t1=new CSVTest();
		try {
			t1.write();
			t1.read();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

	public void write() throws Exception {
		Appendable out = new PrintWriter("file.csv");
		CSVPrinter printer = CSVFormat.DEFAULT.withHeader("userId", "userName").print(out);
		for (int i = 0; i < 10; i++) {
			printer.printRecord("userId" + i, "userName" + i);
		}
		printer.flush();
		printer.close();
	}

	public void read() throws Exception {
		FileReader reader = new FileReader("file.csv");
		CSVParser parser = CSVFormat.DEFAULT.withHeader("userId", "userName").parse(reader);
		for (CSVRecord record : parser) {
			System.out.println(record.get("userId") + ":" + record.get("userName"));
		}
		reader.close();
	}

}

javac命令

用法: javac <options> <source files>
其中, 可能的选项包括:
  -g                         生成所有调试信息
  -g:none                    不生成任何调试信息
  -g:{lines,vars,source}     只生成某些调试信息
  -nowarn                    不生成任何警告
  -verbose                   输出有关编译器正在执行的操作的消息
  -deprecation               输出使用已过时的 API 的源位置
  -classpath <路径>            指定查找用户类文件和注释处理程序的位置
  -cp <路径>                   指定查找用户类文件和注释处理程序的位置
  -sourcepath <路径>           指定查找输入源文件的位置
  -bootclasspath <路径>        覆盖引导类文件的位置
  -extdirs <目录>              覆盖所安装扩展的位置
  -endorseddirs <目录>         覆盖签名的标准路径的位置
  -proc:{none,only}          控制是否执行注释处理和/或编译。
  -processor <class1>[,<class2>,<class3>...] 要运行的注释处理程序的名称; 绕过默认的搜索进程
  -processorpath <路径>        指定查找注释处理程序的位置
  -parameters                生成元数据以用于方法参数的反射
  -d <目录>                    指定放置生成的类文件的位置
  -s <目录>                    指定放置生成的源文件的位置
  -h <目录>                    指定放置生成的本机标头文件的位置
  -implicit:{none,class}     指定是否为隐式引用文件生成类文件
  -encoding <编码>             指定源文件使用的字符编码
  -source <发行版>              提供与指定发行版的源兼容性
  -target <发行版>              生成特定 VM 版本的类文件
  -profile <配置文件>            请确保使用的 API 在指定的配置文件中可用
  -version                   版本信息
  -help                      输出标准选项的提要
  -A关键字[=值]                  传递给注释处理程序的选项
  -X                         输出非标准选项的提要
  -J<标记>                     直接将 <标记> 传递给运行时系统
  -Werror                    出现警告时终止编译
  @<文件名>                     从文件读取选项和文件名

java命令


 用法: java [-options] class [args...]
           (执行类)
   或  java [-options] -jar jarfile [args...]
           (执行 jar 文件)
其中选项包括:
    -d32      使用 32 位数据模型 (如果可用)
    -d64      使用 64 位数据模型 (如果可用)
    -server      选择 "server" VM
                  默认 VM 是 server,
                  因为您是在服务器类计算机上运行。


    -cp <目录和 zip/jar 文件的类搜索路径>
    -classpath <目录和 zip/jar 文件的类搜索路径>
                  用 : 分隔的目录, JAR 档案
                  和 ZIP 档案列表, 用于搜索类文件。
    -D<名称>=<值>
                  设置系统属性
    -verbose:[class|gc|jni]
                  启用详细输出
    -version      输出产品版本并退出
    -version:<值>
                  警告: 此功能已过时, 将在
                  未来发行版中删除。
                  需要指定的版本才能运行
    -showversion  输出产品版本并继续
    -jre-restrict-search | -no-jre-restrict-search
                  警告: 此功能已过时, 将在
                  未来发行版中删除。
                  在版本搜索中包括/排除用户专用 JRE
    -? -help      输出此帮助消息
    -X            输出非标准选项的帮助
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  按指定的粒度启用断言
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  禁用具有指定粒度的断言
    -esa | -enablesystemassertions
                  启用系统断言
    -dsa | -disablesystemassertions
                  禁用系统断言
    -agentlib:<libname>[=<选项>]
                  加载本机代理库 <libname>, 例如 -agentlib:hprof
                  另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
    -agentpath:<pathname>[=<选项>]
                  按完整路径名加载本机代理库
    -javaagent:<jarpath>[=<选项>]
                  加载 Java 编程语言代理, 请参阅 java.lang.instrument
    -splash:<imagepath>
                  使用指定的图像显示启动屏幕
有关详细信息, 请参阅 http://www.oracle.com/technetwork/java/javase/documentation/index.html。

javac ,java示例

javac -cp lib/commons-csv-1.7.jar   src/com/yw/test02/*.java -d bin

java -cp ./lib/commons-csv-1.7.jar:./bin  com.yw.test02.CSVTest

jar命令

用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项:
    -c  创建新档案
    -t  列出档案目录
    -x  从档案中提取指定的 (或所有) 文件
    -u  更新现有档案
    -v  在标准输出中生成详细输出
    -f  指定档案文件名
    -m  包含指定清单文件中的清单信息
    -n  创建新档案后执行 Pack200 规范化
    -e  为捆绑到可执行 jar 文件的独立应用程序
        指定应用程序入口点
    -0  仅存储; 不使用任何 ZIP 压缩
    -P  保留文件名中的前导 '/' (绝对路径) 和 ".." (父目录) 组件
    -M  不创建条目的清单文件
    -i  为指定的 jar 文件生成索引信息
    -C  更改为指定的目录并包含以下文件
如果任何文件为目录, 则对其进行递归处理。
清单文件名, 档案文件名和入口点名称的指定顺序
与 'm', 'f' 和 'e' 标记的指定顺序相同。

示例 1: 将两个类文件归档到一个名为 classes.jar 的档案中: 
       jar cvf classes.jar Foo.class Bar.class 
示例 2: 使用现有的清单文件 'mymanifest' 并
           将 foo/ 目录中的所有文件归档到 'classes.jar' 中: 
       jar cvfm classes.jar mymanifest -C foo/ .

jar使用范例:

(1)创建jar包

$ jar cf hello.jar hello 利用hello目录生成hello.jar包,如hello.jar存在,则覆盖

(2)创建并显示打包过程

$ jar cvf hello.jar hello 利用hello目录创建hello.jar包,并显示创建过程

(3)显示jar包

$ jar tvf hello.jar 查看hello.jar包的内容

指定的jar包必须真实存在,否则会发生FileNoutFoundException。

(4)解压jar包

$ jar xvf hello.jar 解压hello.jar至当前目录

(5)jar中添加文件

$ jar uf hello.jar HelloWorld.java 将HelloWorld.java添加到hello.jar包中

(6)创建不压缩内容jar包

$ jar cvf0 hello.jar *.class 利用当前目录中所有的.class文件生成一个不压缩jar包

(7)创建带manifest.mf文件的jar包

$ jar cvfm hello.jar manifest.mf hello

创建的jar包多了一个META-INF目录,META-INF止录下多了一个manifest.mf文件,至于manifest.mf的作用,后面会提到.

(8)忽略manifest.mf文件

$ jar cvfM hello.jar hello 生成的jar包中不包括META-INF目录及manifest.mf文件

(9)加-C应用:

$ jar cvfm hello.jar mymanifest.mf -C hello/

表示在切换到hello目录下然后再执行jar命令

Manifest.mf文件编写规则:

manifest.mf的编写一定要注意一些细节,它是很苛刻的,

我在此也载过不少跟头,谁让它这么小气呢,没办法,所以专门给大家列出来。

  • (1) 不能有空行和空格的地方

    第一行不可以是空行( 第一行的行前不可以有空行),行与行之间不能有空行,第行的行尾不可以有空格

  • (2) 一定要有空行的地方

最后一行得是空行(在输完你的内容后加一个回车就OK)

  • (3) 一定有空格的地方

    key: value 在分号后面一定要写写一个空格

cd bin
ywdeMacBook-Air:bin yw$ jar -cfe ywproject.jar com.yw.test02.CSVTest com/yw/test02

jar -xvf ywproject.jar

ywdeMacBook-Air:bin yw$ jar -xvf ywproject.jar

已创建: META-INF/
已解压: META-INF/MANIFEST.MF
已创建: com/yw/test02/
已解压: com/yw/test02/CSVTest.class

ywdeMacBook-Air:META-INF yw$ cat MANIFEST.MF 

Manifest-Version: 1.0
Created-By: 1.8.0_212 (Oracle Corporation)
Main-Class: com.yw.test02.CSVTest

ywdeMacBook-Air:META-INF yw$ vi MANIFEST.MF 

ywdeMacBook-Air:META-INF yw$ cat MANIFEST.MF 

Manifest-Version: 1.0
Created-By: 1.8.0_212 (Oracle Corporation)
Main-Class: com.yw.test02.CSVTest
Class-Path: lib/commons-csv-1.7.jar

cp aaa/META-INF/MANIFEST.MF ./

jar cvfm aa.jar ./MANIFEST.MF  -C aaa/ .

ywdeMacBook-Air:20190927 yw$ java -jar aa.jar

userId:userName
userId0:userName0
userId1:userName1
userId2:userName2
userId3:userName3
userId4:userName4
userId5:userName5
userId6:userName6

tree ./

./
└── 20190927
├── 20190927project.jar
├── MANIFEST.MF
├── aaa
│ ├── META-INF
│ │ └── MANIFEST.MF
│ └── com
│ └── banyuan
│ └── test01
│ └── CSVTest.class
├── aa.jar
├── bin
│ ├── 20190927project.jar
│ └── com
│ └── banyuan
│ └── test01
│ └── CSVTest.class
├── file.csv
├── lib
│ └── commons-csv-1.7.jar
└── src
└── com
└── banyuan
└── test01
└── CSVTest.java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值