怎样创建可执行的jar文件?(50分)

  • 主题发起人 主题发起人 jiang_sl
  • 开始时间 开始时间
J

jiang_sl

Unregistered / Unconfirmed
GUEST, unregistred user!
/****************************************************************
可执行的 JAR
一个可执行的 jar 文件是一个自包含的 Java 应用程序,它存储在特别配置的JAR 文件中,可以由 JVM 直接执行它而无需事先提取文件或者设置类路径。要运行存储在非可执行的 JAR 中的应用程序,必须将它加入到您的类路径中,并用名字调用应用程序的主类。但是使用可执行的 JAR 文件,我们可以不用提取它或者知道主要入口点就可以运行一个应用程序。可执行 JAR 有助于方便发布和执行 Java 应用程序。
创建可执行 JAR
创建一个可执行 JAR 很容易。首先将所有应用程序代码放到一个目录中。假设应用程序中的主类是 com.mycompany.myapp.Sample。您要创建一个包含应用程序代码的 JAR 文件并标识出主类。为此,在某个位置(不是在应用程序目录中)创建一个名为 manifest 的文件,并在其中加入以下一行:
Main-Class: com.mycompany.myapp.Sample
然后,像这样创建 JAR 文件:
jar cmf manifest ExecutableJar.jar application-dir
*************************************************************************/

我按照这种方法创建不了,那位大虾可以讲得准确更详细????????
多谢了~~~~~~~~~~~~
 

你自己创建的manifest文件内容必须回车换行结束。
比如:manifest的内容为:
Main-Class: com.mycompany.myapp.Sample
//虽然内容只有一行,但是必须在后面加上回车再保存文件,
//才会被sun识别到文件的内容。

 
多谢lnboy大侠,加多个回车就搞定了[:)]
你可以说说main函数的args引数,存储的是什么内容,而它具体的内容又是什么意思吗??
再次感谢
 

存放的是命令行传入的参数,
比如 java -classpath "d:/java/" com.delphibbs.Test aaa bbb ccc
那么Test得到args[]={"aaa","bbb","ccc"}
 
不解
可以写出个具体例子吗?
这些参数有什么用?
我看IO系统里经常会用到args.length什么的,它和文件操作有什么关系吗?
请大家勇跃发言~~~~~~~
 
简单的例子:
package mypackage1;
public class Class1
{
public Class1()
{
} public static void main(String[] args){
for(int i=0;i<args.length;i++){
System.out.println(args);
}
}
}
执行命令:
java mypackage1.Class1 aaa bbb ccc ddd "EEE"
执行结果:
aaa
bbb
ccc
ddd
EEE



下面是个jasper的例子:
/* Teodor Danciu
* 173, Calea Calarasilor, Bl. 42, Sc. 1, Ap. 18
* Postal code 030615, Sector 3
* Bucharest, ROMANIA
* Email: teodord@users.sourceforge.net
*/
importdo
ri.jasper.engine.*;
importdo
ri.jasper.engine.export.*;
importdo
ri.jasper.engine.util.*;
importdo
ri.jasper.view.*;
import java.util.*;
import java.sql.*;
import java.io.*;
import java.awt.*;

/**
*
*/
public class JasperApp
{

/**
*
*/
private static final String TASK_COMPILE = "compile";
private static final String TASK_FILL = "fill";
private static final String TASK_PRINT = "print";
private static final String TASK_PDF = "pdf";
private static final String TASK_XML = "xml";
private static final String TASK_XML_EMBED = "xmlEmbed";
private static final String TASK_HTML = "html";
private static final String TASK_XLS = "xls";
private static final String TASK_CSV = "csv";
private static final String TASK_RUN = "run";


/**
*
*/
public static void main(String[] args)
{
String fileName = null;
String taskName = null;
if(args.length == 0)
{
usage();
return;
}

int k = 0;
while ( args.length > k )
{
if ( args[k].startsWith("-T") )
taskName = args[k].substring(2);
if ( args[k].startsWith("-F") )
fileName = args[k].substring(2);

k++;
}
try
{
long start = System.currentTimeMillis();
if (TASK_COMPILE.equals(taskName))
{
JasperCompileManager.compileReportToFile(fileName);
System.err.println("Compile time : " + (System.currentTimeMillis() - start));
System.exit(0);
}
else
if (TASK_FILL.equals(taskName))
{
//Preparing parameters
Image image = Toolkit.getDefaultToolkit().createImage("dukesign.jpg");
MediaTracker traker = new MediaTracker(new Panel());
traker.addImage(image, 0);
try
{
traker.waitForID(0);
}
catch (Exception e)
{
e.printStackTrace();
}

Map parameters = new HashMap();
parameters.put("ReportTitle", "The First Jasper Report Ever");
parameters.put("MaxOrderID", new Integer(10500));
parameters.put("SummaryImage", image);

JasperFillManager.fillReportToFile(fileName, parameters, getConnection());
System.err.println("Filling time : " + (System.currentTimeMillis() - start));
System.exit(0);
}
else
if (TASK_PRINT.equals(taskName))
{
JasperPrintManager.printReport(fileName, true);
System.err.println("Printing time : " + (System.currentTimeMillis() - start));
System.exit(0);
}
else
if (TASK_PDF.equals(taskName))
{
JasperExportManager.exportReportToPdfFile(fileName);
System.err.println("PDF creation time : " + (System.currentTimeMillis() - start));
System.exit(0);
}
else
if (TASK_XML.equals(taskName))
{
JasperExportManager.exportReportToXmlFile(fileName, false);
System.err.println("XML creation time : " + (System.currentTimeMillis() - start));
System.exit(0);
}
else
if (TASK_XML_EMBED.equals(taskName))
{
JasperExportManager.exportReportToXmlFile(fileName, true);
System.err.println("XML creation time : " + (System.currentTimeMillis() - start));
System.exit(0);
}
else
if (TASK_HTML.equals(taskName))
{
JasperExportManager.exportReportToHtmlFile(fileName);
System.err.println("HTML creation time : " + (System.currentTimeMillis() - start));
System.exit(0);
}
else
if (TASK_XLS.equals(taskName))
{
File sourceFile = new File(fileName);

JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);

File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".xls");

JRXlsExporter exporter = new JRXlsExporter();

exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, destFile.toString());
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);

exporter.exportReport();
System.err.println("XLS creation time : " + (System.currentTimeMillis() - start));
System.exit(0);
}
else
if (TASK_CSV.equals(taskName))
{
File sourceFile = new File(fileName);

JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);

File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".csv");

JRCsvExporter exporter = new JRCsvExporter();

exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, destFile.toString());

exporter.exportReport();
System.err.println("CSV creation time : " + (System.currentTimeMillis() - start));
System.exit(0);
}
else
if (TASK_RUN.equals(taskName))
{
//Preparing parameters
Image image = Toolkit.getDefaultToolkit().createImage("dukesign.jpg");
MediaTracker traker = new MediaTracker(new Panel());
traker.addImage(image, 0);
try
{
traker.waitForID(0);
}
catch (Exception e)
{
e.printStackTrace();
}

Map parameters = new HashMap();
parameters.put("ReportTitle", "The First Jasper Report Ever");
parameters.put("MaxOrderID", new Integer(10500));
parameters.put("SummaryImage", image);

JasperRunManager.runReportToPdfFile(fileName, parameters, getConnection());
System.err.println("PDF running time : " + (System.currentTimeMillis() - start));
System.exit(0);
}
else
{
usage();
System.exit(0);
}
}
catch (JRException e)
{
e.printStackTrace();
System.exit(1);
}
catch (Exception e)
{
e.printStackTrace();
System.exit(1);
}
}

/**
*
*/
private static void usage()
{
System.out.println( "JasperApp usage:" );
System.out.println( "/tjava JasperApp -Ttask -Ffile" );
System.out.println( "/tTasks : compile | fill | print | pdf | xml | xmlEmbed | html | xls | csv | run" );
}

/**
*
*/
private static Connection getConnection() throws ClassNotFoundException, SQLException
{
//Change these settings according to your local configuration
String driver = "org.hsqldb.jdbcDriver";
String connectString = "jdbc:hsqldb:hsql://localhost";
String user = "sa";
String password = "";

Class.forName(driver);
Connection conn = DriverManager.getConnection(connectString, user, password);
return conn;
}

}
 
lnboy:你给出的简单例子我看了,也测试了(**难的那个看不明**)
args引数可以人为地输入,有无系统自动产生的??
我有个很大的疑问要这些来做什么???
看下面的例子
//: c11:DirList.java
// From 'Thinking in Java, 2nd ed.' by Bruce Eckel
// www.BruceEckel.com. See copyright notice in CopyRight.txt.
// Displays directory listing.
package javabook.directory1;
import java.io.*;
import java.util.*;
//import com.bruceeckel.util.*;
public class DirList {
public static void main(String[] args) {
// args[1]="aa";
File path = new File(".");
String[] list;
if(args.length == 0)
list = path.list();
else

list = path.list(new DirFilter(args[0]));
Arrays.sort(list);
// new AlphabeticComparator());
for(int i = 0;
i < list.length;
i++)
System.out.println(list);
for(int j = 0;
j < args.length;
j++)
System.out.println(args[j]);
}
}
class DirFilter implements FilenameFilter {
String af;
DirFilter(String afn) { af = afn;
}
public boolean accept(File dir, String name) {
// Strip path information:
String f = new File(name).getName();
return f.indexOf(af) != -1;
}
} ///:~
既然args没有人为输入引数那args.length肯定为0啦,那个else
语句肯定执行不了,是吗??
从这个例子是否可以看出,args 会自动产生一些引数??
还有的是args.length==0 这样用的用意是什么??
希望你能回答,麻烦了~~~~
 
public class DirList {
public static void main(String[] args) {
File path = new File(".");
//"."的意思是表示当前文件夹路径,把它打印出来看看就明白了
System.out.println("默认的文件路径是:"+path.getAbsolutePath());
String[] list;
if(args.length == 0)
//如果传入参数的数组长度为0,
//那么表明用户没有输入文件夹路径。
//因此默认列出当前文件夹里的东西
list = path.list();
else
//传入参数的数组长度>0,即长度至少为1
//因此把第一个参数做为文件夹路径,
//并列出用户指定的文件夹的路径
list = path.list(new DirFilter(args[0]));
Arrays.sort(list);
// new AlphabeticComparator());
for(int i = 0;
i < list.length;
i++)
System.out.println(list);
for(int j = 0;
j < args.length;
j++)
System.out.println(args[j]);
}
}
 
这两天忙着装Linux,没得上网~~~~~~~
对args 有所了解啦
不过它在实际工程中的用处还是有不明,它有用吗(除了调试)??
lnboy我们可以交个QQ吗?我的QQ是:21097362
来时请注明:lnboy
哈哈~~~~[:D]
 
在命令行下,敲下java回车,
相关的提示就是agrs的使用啊。
另外javac等等。全部都用到了命令行参数。
我不明白 你为什么会不理解它的用处。
ps:我只习惯论坛的交流方式,不上QQ,实在抱歉。
cjsdn上你的那个问题也是提的吧,他们已经回答的很详细了。
 
太可惜了,没能联系上你[:D]
不过非常多谢你能不烦其地指导像我这样的小虾们~~~~~
你好眼力呀,系cjsdn都俾你睇到了,哈哈~~~~~~
 
接受答案了.
 
后退
顶部