Skip to content

Latest commit

 

History

History
177 lines (108 loc) · 4.77 KB

使用命令编译打包.md

File metadata and controls

177 lines (108 loc) · 4.77 KB

目录准备

  1. 创建项目根目录 project
  2. 创建源码目录project/src
  3. 创建编译文件后的文件目录project/classes
  4. 创建lib库目录project/lib

编译

不依赖任何类库

1、在project/src目录下创建com/feb13th/demo1文件夹及其子文件夹。

2、在demo1文件夹下创建HelloWorld.java文件。

package用于指定当前文件的包名,如果当前文件在根目录(本项目中是src目录),那么可以省略package一行。

import用于引入其他在项目中可能用到的文件。格式为包名.文件名(文件名需去除**.java**后缀)。

HelloWorld.java

package com.feb13th.demo1;

import com.feb13th.demo1.util.MyTools;

public class HelloWorld {
	public static void main(String[] args) {
		System.out.println("Hello World!!");
		System.out.println(new MyTools().getTime());
	}
}

3、在demo1文件夹下创建util文件夹用于存在MyTools.java文件。

MyTools.java

package com.feb13th.demo1.util;

import java.util.Date;

public class MyTools {
	public String getTime() {
		return new Date().toString();
	}
}

4、在project文件夹下执行如下命令编译:

javac -d .\classes .\src\com\feb13th\demo1\HelloWorld.java .\src\com\feb13th\demo1\util\MyTools.java

目录分隔符根据操作系统划分,windows为**\, linux为/**

-d 用于指定文件编译后的输出目录。

后面跟的两项为我们要编译的java源文件。如果在同一个目录下存在多个需要编译的源文件,可以使用匹配符***.java**,如.\src\com\feb13th\demo1\*.java

**注: ** *.java只能匹配与单个文件夹,对其子文件无效。

依赖类库

将依赖的类库文件放入lib目录下。如lib\fastjson-1.2.58.jar

1、修改HelloWorld.java

package com.feb13th.demo1;

import com.feb13th.demo1.util.MyTools;
import com.alibaba.fastjson.JSONObject;

public class HelloWorld {
	public static void main(String[] args) {
		System.out.println("Hello World!!");
		System.out.println(new MyTools().getTime());
		JSONObject obj = new JSONObject();
		obj.put("1", "one");
		obj.put("2", "two");
		System.out.println(obj.toJSONString());
	}
}

导入fastjson对象,并使用该对象生成json字符串。

2、使用-classpath指定类库文件

javac -d .\classes -classpath .\lib\fastjson-1.2.58.jar .\src\com\feb13th\demo1\HelloWorld.java .\src\com\feb13th\demo1\util\MyTools.java

-classpath 用于指定代码编译时使用类库的位置,多个类库可以使用分隔符进行分割,windows使用 ; ,linux使用 :

运行

java指令用于运行java程序

运行未依赖类库的程序

执行java指令需要在编译文件的根目录

java com.feb13th.demo1.HelloWorld

语法为:java main函数所在的文件

运行依赖类库的程序

切换到project目录。执行如下脚本

java -classpath ./classes/;./lib/fastjson-1.2.58.jar;./dependency/* com.feb13th.demo1.HelloWorld

-classpath 用于指定可执行文件的位置。

./classes:刚刚编译的class文件目录

./lib/fastjson-1.2.58.jar:程序中依赖的类库。

./dependency/*:存放jar的文件夹,当我们有很多jar的时候,一个个指定classpath无疑费时费力,那么我们可以将所有的jar存放到一个目录中,使用通配符进行指定classpath。

多个classpath之间使用分隔符进行分割,windows使用 ; ,linux使用 :

注: 指定jar包时,不能通过匹配符进行匹配。例如spring-*.jar

打包

1、拷贝lib目录到classes目录下

2、编写MANIFEST.MF文件。

Manifest-Version: 1.0
Created-By: 1.8.0_71 (Oracle Corporation)
Main-Class: com.feb13th.demo1.HelloWorld
Class-Path: lib/fastjson-1.2.58.jar


该文件最后必须保留两个空行(冒号)后面必须跟一个空格。

Manifest-Version:指定版本号(可选)

Created-By:构建的JDK版本(可选)

Main-Class:main方法所有在类,如果指定必须唯一。

Class-Path:jar包中访问第三方类库的路径,和本地jar包的存储路径不是一个东西。多个类库之间使用 空格 分割。如果没有依赖第三方库可以不指定。

3、切换到project目录,执行打包脚本

jar -cvfm my.jar ./MANIFEST.MF -C ./classes .

-C 用于指定目录并包含该目录下的文件, . (点)用于匹配当前文件夹下的所有文件。

4、运行jar

java -jar my.jar

也可以指定**-classpath**