2011-10-07 110 views
0

我有一个Java应用程序和构建文件,该文件,它的任务中,有一个任务,从应用程序创建一个jar文件和一个运行应用程序从JAR或批处理文件

<!-- ===== Create An Executable Jar target ======--> 
<target name="jar-task" depends="compile-task"> 
    <mkdir dir="${jar.dir}"/> 
    <jar destfile="jar/Guix.jar" basedir="${gui_bin.dir}"> 
     <fileset dir="${basedir}"> 
      <include name="img/**/" /> 
      </fileset> 
      <manifest> 
       <attribute name="Main-Class" value="sys.deep.cepu.Start"/> 
      </manifest> 
      <filelist dir="${basedir}" files="user.properties"/> 
    </jar> 
</target> 

<!-- 
    ============ Run target =================== 
    --> 
<target name="run-task" depends="jar-task"> 
     <java classpath="${basedir};jar/Guix.jar;CK-DASP-2.0.0.jar;library/*;user.properties;img/* " classname="sys.deep.cepu.Start" fork="true"> 
    </java> 
</target> 
执行Java运行的应用程序

构建文件运行良好,创建jar并运行应用程序。我想让用户通过点击单个文件(jar或批处理文件)来启动应用程序。我试图点击生成的可执行jar文件,但没有任何反应。这是正常的吗?有人可以给我一个如何从这个jar或从批处理文件执行程序的帮助吗?谢谢!

+0

可能重复[在Windows中运行Jar文件](http://stackoverflow.com/questions/394616/running-jar-file-in-windows) – CoolBeans

+0

请参阅上面的重复问题链接。如果这回答你的问题,那么你应该标记删除这篇文章。 – CoolBeans

回答

1

当你建立你的jar文件时,你已经指定了Main-Class。但是,您并未在清单文件中指定所需的库,只在运行应用程序时才在ant文件中指定。

将另一个清单属性写入蚂蚁文件。 name应该是Class-Path,值为空格分隔列表库。以here (Wikipedia)为例。

这之后你的应用程序应该进入

java -jar Guix.jar 

然后按照步骤描述in this question,使其可启动通过双击启动时。

3

是的,这是正常的。您必须从命令行或通过批处理脚本启动它。尝试使用作为批处理脚本(如果您有MANIFEST.MF)添加到您的jar。

java -ea -jar Application.jar <Parameters> 

或以其他方式:

java -cp jar-file packageOfMainClass.MainClass 
+0

它引发错误: 找不到主类:sys.deep.cepu.Start。程序将会退出。 奇怪,因为主要类在那里,它与运行任务一起工作 – Anto

+0

您是否在您的jar文件中包含了MANIFEST.MF? – MasterCassim

+0

那么,jar-task中有一个元素..这是你指的是什么? – Anto

0

替代方式来运行一个jar文件

  1. Java的罐子JAR文件

  2. java命令的jar文件MainClassNameFullyQualified