Próbuję wygenerować plik .jar zawierający main(), który uruchomi Jetty.Osadzone molo: jak używać .war, który jest zawarty w .jar, z którego zaczyna Jetty?
Moim problemem jest to, że chciałbym .war że Jetty ładunki być zawarte w tym samym .jar.
byłem w stanie stworzyć .jar zawierającego .war z:
W 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>
executable-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>
Kod ustawić wojny w pomost:
handler.setWar("myApp.war");
... Próbowałem również:
URL res = Server.class.getResource("myApp.war");
handler.setWar(res.toExternalForm());
... i:
URL res = Thread.currentThread().getContextClassLoader().getSystemResource("myApp.war");
handler.setWar(res.toExternalForm());
Ale nic nie działa!
Przy użyciu tego ostatniego przykładowego kodu, aby uruchomić Jetty, serwer wydaje się, aby rozpocząć poprawnie, ale żadne żądania nie działają. Konfiguracja jest oczywiście błędna.
Wiem, że są pewne sposoby obejścia pliku .war, który jest wykonywalny, ale chciałbym, aby ".war" wewnątrz pracy .jar ".
Każdy pomysł na konfigurację .war?
jak osiągnąć # 1? Moja próba to 'WebAppContext.setWAR (" jar: ... ");' ale wspomniałeś, że prefiks 'jar:' nie działa. Używając wspomnianego kodu, pomost wydobywa '.war' do katalogu'/tmp/jetty/webapp/', ale nawigacja do serwera sieciowego pokazuje mi listę katalogów'/tmp/jetty/webapp/', a nie webapp. @ Stephen – cklab
Nie mam już dostępu do kodu (należy do byłego pracodawcy). IIRC Wyodrębniłem 'war' na'/tmp', a oni dali go do pomostu –
-1 z powodu braku szczegółów. to jest prawie gorsze niż brak jakiejkolwiek pomocy. – barclay