Ich schaute auf this question, aber es löste mein Problem nicht wirklich, also dachte ich mir, ich würde ein neues schreiben.Wie erstellt man ein gebündeltes lauffähiges Glas mit Ant
Ich brauche eine runnable Jar (runnable einfach durch Doppelklick) mit Ant. Ich habe den folgenden Java-Code und die build.xml-Datei, die den Code gut kompiliert und eine JAR-Datei erstellt, aber wenn ich versuche, das JAR durch Doppelklick auszuführen, erhalte ich die Meldung "Konnte Hauptklasse nicht finden: HttpController. Java."
Ich habe den Verdacht, dass mein Problem mit dem Laden der externen Apache Http.jar
zu tun hat, wie ich erfolgreich ein Glas für ein Projekt gebaut und ausgeführt habe, die identisch ist, außer dass es keine externen Gläser referenziert.
ist hier mein Code:
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:
<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="Test" basedir="." default="jar">
<property name="source.dir" value="src"/>
<property name="lib.dir" value="lib"/>
<property name="class.dir" value="bin"/>
<property name="jar.dir" value="dist"/>
<property name="main-class" value="pack.HttpController"/>
<path id="libraries.path">
<fileset dir="${lib.dir}">
<include name="*.jar"/>
</fileset>
</path>
<target name="clean" description="delete old files">
<delete dir="${class.dir}"/>
<delete dir="${jar.dir}"/>
</target>
<target name="compile" description="build class files" depends="clean">
<mkdir dir="${class.dir}"/>
<javac srcdir="${source.dir}" destdir="${class.dir}">
<classpath refid="libraries.path"/>
</javac>
</target>
<target name="jar" depends="compile">
<mkdir dir="${jar.dir}"/>
<mkdir dir="${jar.dir}/${lib.dir}"/>
<copy todir="${jar.dir}/${lib.dir}" flatten="true">
<path refid="libraries.path"/>
</copy>
<jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${class.dir}">
<manifest>
<attribute name="Main-Class" value="${main-class}"/>
<attribute name="Class-Path" value="${jar.dir}/${lib.dir}/Apache HTTP.jar"/>
</manifest>
</jar>
</target>
<target name="run" depends="jar">
<java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/>
</target>
</project>
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 wurde gemäß Mikes Antwort aktualisiert. Das Problem ist immer noch nicht gelöst. Außerdem wurde der Inhalt der Manifest-Datei gemäß der Antwort von Danation gepostet.
@see http://one-jar.sourceforge.net/index.php?page=build-tools&file=ant-example. – Jayan
@jayan ist es möglich, dies ohne externe Tools zu tun? zB indem ich einfach Ant benutze und meine eigene build.xml Datei schreibe? – ewok
Es gibt Fragen/Antworten in SO über die Erstellung von ausführbaren Gläsern mit Eclipse usw. Siehe http://StackOverflow.com/Questions/502960/Eclipse-How-To-Build-an-Executable-Jar-With-External-Jar. Ich bevorzuge Ein-Jar, da es eine einzelne ausführbare Datei erstellt. Die Integration in die Ameise sollte 10 Minuten dauern. Warum nicht versuchen, das Ergebnis zu sehen? – Jayan