手把手教java——手动编译可执行jar包

这是一篇新手教!关于手动编译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,你将会看到如下


出现异常是因为没有服务器,服务器将会在会面讲。

好了,到这里就已经结束了。

谢谢大家捧场 大笑
  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
《大鱼吃小鱼》是一款简单而有趣的游戏,适合初学者学习Java游戏开发。下面我将手把手你如何用Java开发这款游戏,并提供相应的源码。 步骤一:创建游戏窗口和游戏主类 首先,我们需要创建游戏的窗口,可以使用Java提供的Swing框架来实现。创建一个GameWindow类,继承JFrame类,并在构造方法中设置窗口的基本属性。 步骤二:添加游戏画布 在GameWindow类中,创建一个GameCanvas类,继承JPanel类,并重写paintComponent()方法,在此方法中实现游戏场景的绘制,包括大鱼、小鱼和其他游戏元素。 步骤三:添加游戏逻辑 在GameWindow类中,添加游戏逻辑的处理方法,包括大鱼的移动、小鱼的生成和碰撞检测等。 步骤四:添加游戏控制 在GameWindow类中,添加游戏控制的方法,包括键盘事件的处理和游戏状态的切换等。 步骤五:运行游戏 在GameWindow类中,添加一个main()方法,创建游戏窗口对象,并启动游戏循环。 以上是《大鱼吃小鱼》游戏的基本开发步骤,下面提供相应的源码供参考: ```java import javax.swing.*; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; public class GameWindow extends JFrame implements KeyListener{ private GameCanvas gameCanvas; private boolean isRunning; public GameWindow(){ super("大鱼吃小鱼"); setSize(800, 600); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); addKeyListener(this); gameCanvas = new GameCanvas(); add(gameCanvas, BorderLayout.CENTER); isRunning = true; } public void start(){ while(isRunning){ update(); gameCanvas.repaint(); try{ Thread.sleep(10); }catch(InterruptedException e){ e.printStackTrace(); } } } public void update(){ // 游戏逻辑更新 } public void keyPressed(KeyEvent e){ // 键盘按下事件处理 } public void keyReleased(KeyEvent e){ // 键盘释放事件处理 } public void keyTyped(KeyEvent e){ // 键盘输入事件处理 } public static void main(String[] args){ GameWindow gameWindow = new GameWindow(); gameWindow.setVisible(true); gameWindow.start(); } } class GameCanvas extends JPanel{ protected void paintComponent(Graphics g){ super.paintComponent(g); // 游戏场景绘制 } } ``` 通过以上源码和步骤,我们可以实现《大鱼吃小鱼》游戏的基本开发,通过添加更多的游戏逻辑和个性化设计,可以进一步完善这款游戏。希望对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值