4

我已经jar使用 Netbeans 构建了一个文件,它在我的系统中运行良好。但是我想制作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;
}
4

3 回答 3

2

您可以使用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,它们被输出到bin具有MANIFEST.MF指定属性的 a 。

于 2012-09-01T18:11:35.717 回答
2

以下帖子简要说明了如何使用 ANT创建可执行 jar :

这篇文章解释了manifestclasspath任务如何帮助创建类路径清单条目(使可执行 jar 的构建更加健壮且不易出错):

最后一个更复杂的示例演示了在创建可执行 jar 时使用ivy来管理项目的第 3 方依赖项:

于 2012-09-02T01:13:05.067 回答
1

只需执行以下命令即可创建 JAR 文件:

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

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

Main-Class: createExcel

但也要考虑以下提示:

有几种方法:

  1. 创建一个 jar 文件并将您的类(没有依赖项)放在那里。使用一些工具(任何 IDE 都有)来执行此操作并使用 main 函数指定类。您也可以从命令行手动执行此操作。当用户想要运行它时,他应该指定类路径并且所有依赖项都应该在该类路径中。

  2. 创建相同的 jar 并创建 .bat 或 .sh 文件,在其中设置类路径并运行您的 jar。

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

请记住,Netbeans 可以为您提供很多帮助;)

于 2012-09-01T16:20:49.103 回答