Linux学习基础篇03 ubuntu指令和技巧(八) Jar包

目录
1. 使用Jar包
2. 制作通用的Jar包
3. 制作可执行的Jar包

1. 使用Jar包

例如,现在有Jar包(calculator.jar),在Test.java中需要使用该Jar包。编译和运行指令如下。

$ javac -cp calculator.jar Test.java
$ java -cp $CLASSPATH:calculator.jar Test

说明:$CLASSPATH是linux中JDK的环境变量

2. 制作通用的Jar包

例如,现在要制作Calculator的Jar包(calculator.jar)。Calculator包含的源文件路径如下:

./calculator/Calculator.java
./calculator/util/Utils.java

Utils.java的内容如下:

package calculator.util;

public class Utils {

    public static void logd(String exp) {
        System.out.println("Utils: "+exp);
    }   
}

Calculator.java的内容如下:

package calculator;

import calculator.util.Utils;

public class Calculator {

    public static String execute(String exp) {
        Utils.logd("execute: "+exp);
        return null;
    }

    public static void main(String[] args) {
        execute("2+3");
    }
}

2.1 生成.class文件

先切换到calculator目录的上一级目录,然后通过java指令生成.class文件。具体的指令如下:

$ cd ../calculator/../
$ javac calculator/Calculator.java

执行完上面的指令后,会生成Calculator.class和Utils.class。

2.2 打包成Jar包

$ find calculator/ -name "*.class" |xargs jar cvf calculator.jar

说明:上面指令的含义是找出calculator目录和其子目录中,所有的.class文件;并将.class文件打包到calculator.jar中。
假如所有的.class文件都在当前目录,可以通过以下指令打包

$ jar cvf calculator.jar *.class

3. 制作可执行的Jar包

可执行的Jar包就是可以直接运行的。例如,存在一个可运行的test.jar,它的执行指令如下:

$ java -jar test.jar

下面通过一则示例,演示如何制作客运行的jar包。

第1步 编辑java源文件

编辑ScreenTest.java,代码如下:

import java.awt.Color;
import java.awt.FlowLayout; 
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JTextField;
import javax.swing.UIManager; 

public class ScreenTest { 
    private static final int[] Colors = { 
        0xffffff, // 白
        0xff0000, // 红
        0x00ff00, // 绿
        0x000000, // 黑
        0x0000ff, // 蓝
    };
    private int mIndex = 0;
    private JButton mExitButton;
    private JTextField mTextView;
    private JFrame mJFrame;

    public ScreenTest() { 
        mJFrame = new JFrame(); 
        final KeyListener mKeyListener = new MyKeyListener();

        // 添加按钮
        mTextView = new JTextField(20);
        mTextView.addKeyListener(mKeyListener);
        // mJFrame.add(mTextView); 

        // 添加按钮
        mExitButton = new JButton("Exit"); 
        mExitButton.addActionListener(new java.awt.event.ActionListener() { 
            public void actionPerformed(java.awt.event.ActionEvent evt) { 
                System.exit(1); 
            } 
        }); 
        // mJFrame.add(mExitButton); 

        // 初始化背景色
        mIndex = 0;
        setColor(mIndex);
        // 添加按键监听器
        mJFrame.addKeyListener(mKeyListener);
        mJFrame.setLayout(new FlowLayout()); 
        mJFrame.setUndecorated(false); 
        // 全屏
        mJFrame.getGraphicsConfiguration().getDevice().setFullScreenWindow(mJFrame); 
        // 显示
        mJFrame.setVisible(true); 
    } 

    private void setColor(int index) {
        mJFrame.getContentPane().setBackground(new Color(Colors[index%Colors.length]));
    }

    private final class MyKeyListener implements KeyListener {
        @Override
        public void keyPressed(KeyEvent e) {
            System.out.println("CODE:"+e.getKeyCode());
            switch (e.getKeyCode()) {
                case KeyEvent.VK_LEFT:
                case KeyEvent.VK_UP:
                    if (mIndex > 0) {
                        mIndex--;
                        setColor(mIndex);
                    } else {
                        System.exit(1);
                    }
                    break;
                case KeyEvent.VK_RIGHT:
                case KeyEvent.VK_DOWN:
                case KeyEvent.VK_ENTER:
                case KeyEvent.VK_SPACE:
                    if (mIndex < Colors.length-1) {
                        mIndex++;
                        setColor(mIndex);
                    } else {
                        System.exit(1);
                    }
                    break;
                case KeyEvent.VK_ESCAPE:
                    System.exit(1);
                    break;
            }
        }
        @Override
        public void keyReleased(KeyEvent e) {}
        @Override
        public void keyTyped(KeyEvent e) {}
    }

    public static void main(String[] args) {
        new ScreenTest();
    }
}

第2步 编辑配置文件manifest.mf

新建并编辑manifest.mf,它的内容如下:

Manifest-Version: 1.0
Created-By: 1.6.0_45 (Sun Microsystems Inc.)
Main-Class: ScreenTest

说明:每一个jar包中都存在manifest.mf文件。而对于可执行的jar包而言,需要手动添加Main-Class项,指定main()函数所在的类,这里的Main-Class必须是main所在的类的package路径!

第3步 生成.class文件

编辑java文件,生成对应的.class文件。

$ java ScreenTest.java

第4步 打包test.jar

将.class和manifest.mf打包成test.jar包,指令如下:

$ jar cvfm test.jar manifest.mf *.class

第5步 运行test.jar

$ java -jar test.jar

将swing打包成exe程序,可以参考将java swing写的用程序打包exe可执行程序

by skywang
Previous     Next