这是一篇新手教!关于手动编译java源代码并打包为可执行jar包,不使用类似Intellij IDEA等IDE。
如果你是从来没接触过类似dos的操作,请认真阅读,一步一步做好笔记,一定要实战操作。
本文基于windows平台。
一:编辑源代码
1.在任何地方(推荐桌面)创建一个文件夹fileupload,如图所示。注意如果你是新手,请一步一步照做,后面的会跟前面有关联,除非你很了解java。
接着在fileupload文件夹中创建src文件夹,在src文件夹中创建java文件夹,不要觉得麻烦,后面你就知道有多重要了的。
说明:fileupload是工程文件夹,src是源代码文件夹,java文件夹表示里面放的java代码
2.在fileupload文件夹下创建两个java源代码文件,分别是FileUpload.java、Md5.java,直接复制,不要修改任何代码。
FileUpload.java文件内容如下
package net.lastcoder.tools.fileupload;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
/**
* auth: WenYF
* date: 2017/4/2 0002
*/
public class FileUpload {
public static final void main(String[] args) {
System.out.println("fileupload...");
String addr = args[0];
String filePath = args[1];
System.out.println("url=" + addr);
System.out.println("filePath=" + filePath);
new net.lastcoder.tools.fileupload.FileUpload(addr, filePath);
}
FileUpload(String addr, String filePath) {
File file = new File(filePath);
if (!file.exists()) {
System.out.println("file not exist.");
return;
}
String md5 = Md5.sum(file.getAbsolutePath());
try {
URL url = new URL(addr);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("md5", md5);
connection.setRequestProperty("filename", file.getName());
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setConnectTimeout(5000);
connection.connect();
OutputStream os = connection.getOutputStream();
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[fis.available()];
int size = fis.read(buffer);
os.write(buffer, 0, size);
fis.close();
os.close();
InputStream is = connection.getInputStream();
StringBuilder sb = new StringBuilder();
byte[] readBuffer = new byte[1024];
while ((size = is.read(readBuffer)) != -1) {
for (int i = 0; i < size; i++) {
sb.append((char)readBuffer[i]);
}
}
System.out.println("code:" + connection.getResponseCode()
+ ",msg=" + connection.getResponseMessage());
System.out.println("content:" + sb.toString());
connection.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Md5.java内容如下
package net.lastcoder.tools.fileupload;
import java.io.FileInputStream;
import java.io.InputStream;
import java.security.MessageDigest;
/**
* auth: WenYF
* date: 2017/4/2 0002
*/
public class Md5 {
private static final char HEX_DIGITS[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F' };
private static String toHexString(byte[] b) {
StringBuilder sb = new StringBuilder(b.length * 2);
for (int i = 0; i < b.length; i++) {
sb.append(HEX_DIGITS[(b[i] & 0xf0) >>> 4]);
sb.append(HEX_DIGITS[b[i] & 0x0f]);
}
return sb.toString();
}
public static String sum(String filename) {
InputStream fis;
byte[] buffer = new byte[1024];
int numRead = 0;
MessageDigest md5;
try{
fis = new FileInputStream(filename);
md5 = MessageDigest.getInstance("MD5");
while((numRead=fis.read(buffer)) > 0) {
md5.update(buffer,0,numRead);
}
fis.close();
return toHexString(md5.digest());
} catch (Exception e) {
System.out.println("error");
return null;
}
}
}
1.在fileupload文件夹创建一个bin文件夹,该文件夹将会存放可执行jar包和编译好的class文件
接着在bin文件夹中创建一个classes的文件夹,该文件夹是用来存放编译好的java字节码class文件
2.好了,回到fileupload目录
按住shift+鼠标右键,选择“在此处打开命令窗口”
或者在开开始菜单输出“cmd”命令,进入到upload文件夹。(不知道请百度打开dos到指定文件夹)
输入如下命令:javac -sourcepath ./src/java/ src/java/Md5.java src/java/FileUpload.java -d ./bin/classes -verbose,按回车编译,不要关闭dos窗口。
这里你-sourcepath表示源代码路径,-d表示输出文件夹
你可以试着去掉-sourcepath后面的 ./src/java,来体会体会。
3.前往bin/classes目录,你将会发现自动生成了很多文件夹,这里如果你对知识好奇,可以看看源代码的第一行代码。
在classes文件夹的最深处生成了FileUpload.class和Md5.class文件
现在源代码已经编译好,接下来就是打包了。
三:打包为可以执行jar包
1.可执行jar一般指有默认的入口,不用去指定。
默认入口通过MANIFEST.MF文件来指定。
因此,在fileupload/bin文件夹下创建一个文件叫MANIFEST.MF,并输入
Manifest-Version: 1.0
Created-By: WenYF
Main-Class: net.lastcoder.tools.fileupload.FileUpload
其中Manifest-Version: 为固定1.0,Main-Class:为主函数入口,还有:后面要有空格,并空两行
2.打开dos窗口,输入jar cvfm ./bin/fileupload.jar ./bin/MANIFEST.MF -C ./bin/classes ./net,按回车
其中注意是cvfm,是cvfm,是cvfm,别高错了。 后面指定jar包名,接着是mf文件, -C指定在那个目录有class文件,最后./net表示起始位置
3.好了,你将在bin目录下看到fileupload.jar了。
四:运行jar包
1.打开dos窗口,输入:java -jar .\bin\fileupload.jar http://localhost:9528/file .\src\java\FileUpload.java,你将会看到如下
出现异常是因为没有服务器,服务器将会在会面讲。
好了,到这里就已经结束了。 谢谢大家捧场