Ich versuche, ein .jar zu erzeugen, das eine main() enthält, die Jetty starten würde.Embedded Jetty: Wie wird ein WAR verwendet, das in der JAR-Datei enthalten ist, von der Jetty gestartet wird?
Mein Problem ist, dass ich die .war mag, dass Jetty Lasten im gleichen .jar aufgenommen werden.
Ich habe in der Lage gewesen, mit dem .jar mit dem .war zu erstellen:
Im pom.xml:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.3</version>
<configuration>
<finalName>myApp</finalName>
<appendAssemblyId>false</appendAssemblyId>
<archive>
<manifest>
<mainClass>com.myApp.Server</mainClass>
</manifest>
</archive>
<descriptors>
<descriptor>src/main/resources/executable-jar-assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-my-jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
ausführbare-jar-assembly.xml:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>jar-with-dependencies-and-war</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>false</useProjectArtifact>
<unpack>true</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>target/classes/</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
<fileSet>
<directory>target/</directory>
<includes>
<include>
myApp.war
</include>
</includes>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
Der Code, den Krieg in Jetty zu setzen:
handler.setWar("myApp.war");
... Ich habe auch versucht:
URL res = Server.class.getResource("myApp.war");
handler.setWar(res.toExternalForm());
... und:
URL res = Thread.currentThread().getContextClassLoader().getSystemResource("myApp.war");
handler.setWar(res.toExternalForm());
Aber nichts funktioniert!
Mit diesem letzten Beispielcode zum Starten von Jetty scheint der Server korrekt zu starten, aber keine Anforderungen funktionieren. Die Konfiguration ist offensichtlich falsch.
Ich weiß, es gibt einige Problemumgehungen, ein .war selbst ausführbar zu machen, aber ich würde gerne die ".war innerhalb der .jar" arbeiten.
Gibt es eine Idee, wie die .war konfiguriert werden sollte?
Wie bewerkstelligen Sie # 1? Mein Versuch war 'WebAppContext.setWAR (" jar: ... ");' aber Sie erwähnen das 'jar:' Präfix funktioniert nicht. Mit dem oben genannten Code extrahiert jetty das '.war' in das Verzeichnis'/tmp/jetty/webapp/', aber die Navigation zum Webserver zeigt mir eine Verzeichnisliste'/tmp/jetty/webapp/'und nicht die Webapp. @Stephen – cklab
Ich habe keinen Zugriff mehr auf den Code (gehört dem ehemaligen Arbeitgeber). IIRC Ich habe den "Krieg" in '/ tmp' selbst extrahiert und sie haben ihn dem Steg –
-1 mangels Besonderheiten gegeben. Das ist fast schlimmer als gar keine Hilfe. – barclay