簡體   English   中英

創建一個獨立的jar文件

[英]Creating an independent jar file

我使用Netbeans構建了一個jar文件,它在我的系統中運行良好。 但是我想制作可以在所有系統中運行的jar文件,該文件具有JRE,即使在該系統中未設置classpath ,它也可以正常工作。

package circle;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


public class Circle {


    public static void main(String[] args) {


        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new Circle().createAndShowGUI(); 
            }
        });
    }

    private void createAndShowGUI() {
        JFrame f = new JFrame("Swing Paint Demo");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        f.add(new MyPanel());
        f.pack();
        f.setVisible(true);

    }

    class MyPanel extends JPanel {

        public MyPanel() {

        setBorder(BorderFactory.createLineBorder(Color.black));

        addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
               startX=e.getX();
               startY=e.getY();
            }
        });

        addMouseMotionListener(new MouseAdapter() {
            public void mouseDragged(MouseEvent e) {
               X=e.getX();
               Y=e.getY();
               repaint();
            }
        });

    }



        public Dimension getPreferredSize() {
        return new Dimension(250,200);
    }

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);       
        //g.setColor(Color.RED);
        //g.fillRect(squareX,squareY,squareW,squareH);
        g.setColor(Color.BLACK);
        g.drawOval(startX,startY,X-startX,Y-startY);
        g.fillOval(startX,startY,X-startX,Y-startY);
    }  


    }

        private int startX,startY,X,Y;
}

您可以使用ant腳本來構建可運行的JAR。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project default="create_run_jar" name="Create Runnable Jar for Project SimpleApp with libraries in sub-folder">
    <!--ANT 1.7 is required -->
    <target name="create_run_jar">
        <jar destfile="C:/Workspaces/SimpleApp/SimpleApp.jar">
            <manifest>
                <attribute name="Main-Class" value="SimpleApp"/>
                <attribute name="Class-Path" value=". SimpleApp_lib/lib1.jar SimpleApp_lib/lib2.jar"/>
            </manifest>
            <fileset dir="C:/Workspaces/SimpleApp/bin"/>
        </jar>
        <delete dir="C:/Workspaces/SimpleApp/SimpleApp_lib"/>
        <mkdir dir="C:/Workspaces/SimpleApp/SimpleApp_lib"/>
        <copy file="C:/path/to/lib/lib1.jar" todir="C:/Workspaces/SimpleApp/SimpleApp_lib"/>
        <copy file="C:/path/to/lib/lib2.jar" todir="C:/Workspaces/SimpleApp/SimpleApp_lib"/>
    </target>
</project>

在這個例子中,該項目的SimpleApp取決於兩個庫: lib1.jarlib2.jar ,其輸出到binMANIFEST.MF有指定的屬性。

以下帖子簡要說明了如何使用ANT創建可執行jar

這篇文章解釋了manifestclasspath任務如何幫助創建classpath清單條目(使可執行jar的構造更健壯,更不易出錯):

最后是一個更復雜的示例,演示了在創建可執行jar時使用ivy來管理項目的第三方依賴項:

您只需執行以下命令即可創建JAR文件:

jar -c excel.jar MANIFEST.MF *.class

MANIFEST.MF文件應包含以下行:

Main-Class: createExcel

但也請考慮以下提示:

有幾種方法:

  1. 創建一個jar文件,並將您的類(沒有依賴項)放在那里。 使用某種工具(任何IDE都具有)來執行此操作,並使用main函數指定類。 您也可以從命令行手動進行操作。 當用戶要運行它時,他應該指定類路徑,所有依賴項都應在該類路徑中。

  2. 創建相同的jar並創建.bat或.sh文件,在其中設置classpath並運行您的jar。

  3. 使用一些特殊工具創建跨平台安裝程序(但是好的工具不是免費的)。

請記住,Netbeans可以為您提供很多幫助;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM