如何使用Ant创建捆绑的可运行jar

我看了这个问题 ,但它并没有真正解决我的问题,所以我想我会发布一个新问题。

我需要使用Ant创建一个可运行的jar(只需双击即可运行)。 我有以下java代码和build.xml文件,它编译代码很好并创建一个jar文件,但是当我尝试通过双击运行jar时,我收到一条消息“无法找到主类:HttpController。 java的“。

我怀疑我的问题与加载外部Apache Http.jar ,因为我已成功构建并运行一个相同项目的jar,除了它没有引用任何外部jar。

这是我的代码:

HttpController.java:

 package pack; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.HttpMessage; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; public class HttpController { public static void main(String[] args) { DefaultHttpClient client = new DefaultHttpClient(); HttpHost httphost = new HttpHost("localhost", 80); try { HttpMessage req = new HttpGet("/test.html"); HttpResponse resp = client.execute(httphost, (HttpGet) req); HttpEntity entity = resp.getEntity(); BufferedReader in = new BufferedReader(new InputStreamReader( entity.getContent())); String line = null; while ((line = in.readLine()) != null) { System.out.println(line); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { // shutdown the connection client.getConnectionManager().shutdown(); } } } 

build.xml文件:

                                         

MANIFEST.MF:

 Manifest-Version: 1.0 Ant-Version: Apache Ant 1.8.3 Created-By: 1.6.0_31-b05 (Sun Microsystems Inc.) Main-Class: HttpController Class-Path: dist/lib 

EDIT build.xml已根据Mike的回答进行了更新。 问题仍未解决。 根据Danation的回答,还发布了清单文件的内容。

喀嚓…

我已经重新编写了build.xml文件,以便在jar文件和Manifest类路径中正确包含这些库。 我假设您的“apache http.jar”文件是Apache Core的包装器,并且包含其他几个用于apache客户端的jar文件等。

build.xml文件

                                            

您的Class-Path条目错误,您必须单独指定每个jar文件,不能使用.jar文件指定目录(只有.class文件的目录)

这在JAR文件规范中有记录,并在Java教程中得到了很好的解释

如果您有两个库名为FirstLib.jarSeconLib.jar Class-Path条目应如下所示:

 Class-Path: lib/FirstLib.jar lib/SecondLib.jar 

编辑
在build.xml中,这将如下所示:

       

这是制作可执行jar文件的一般解决方案,但这是我使用的代码:

                                           

我已经使用这个结构来制作许多不同的可执行jar文件,而且它比你拥有的更简单:-)

放在jar标签下的清单标签中的所有数据将成为具有给定数据的自动生成的清单文件。

看看你的清单文件,它很可能是一个问题。 我只是在清单文件不正确时才看到错误。

只是推测,但我认为它试图运行一个“.java”文件作为它的主类,这是行不通的。

请参阅oracle教程: http : //docs.oracle.com/javase/tutorial/deployment/jar/appman.html 。

如果这根本没有帮助,请在原始问题中发布清单文件的内容以及.jar文件的目录结构。