我已经使用 Netbeans 构建了一个
jar
文件,它在我的系统中运行良好,但我想制作能够在所有具有 JRE 的系统中运行的 jar
文件,并且即使是 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.jar
和 lib2.jar
,它们输出到 bin
,其中 MANIFEST.MF
具有指定的属性。
以下帖子简要说明了如何使用 ANT 创建可执行 jar:
这篇文章解释了 manifestclasspath 任务如何帮助创建类路径清单条目(使可执行 jar 的构建更加健壮且不易出错):
最后一个更复杂的示例演示了在创建可执行 jar 时使用 ivy 来管理项目的第 3 方依赖项:
只需执行以下命令即可创建 JAR 文件:
jar -c excel.jar MANIFEST.MF *.class
MANIFEST.MF 文件应包含以下行:
Main-Class: createExcel
但也请考虑以下提示:
有几种方法:
创建一个 jar 文件并将您的类(没有依赖项)放在那里。使用一些工具(任何 IDE 都有它)来执行此操作并指定具有 main 函数的类。您也可以从命令行手动执行此操作。当用户想要运行它时,他应该指定类路径,并且所有依赖项都应该位于该类路径中。
创建相同的 jar 并创建 .bat 或 .sh 文件,在其中设置类路径并运行 jar。
使用一些特殊工具创建跨平台安装程序(但好的工具不是免费的)。
请记住,Netbeans 可以为您提供很多帮助;)