Grizzly und Jersey standalone-jar
Ich versuche, das Paket Grizzly mit Jersey als ein einzelnes Glas mit Maven-shade-plugin. Aber ich bekomme immer die Meldung No container provider supports the type class org.glassfish.grizzly.http.server.HttpHandler
Den code-funktioniert in Eclipse, aber nicht in ein jar verpackt:
public class Main {
private static URI getBaseURI() {
return UriBuilder.fromUri("http://localhost/").port(9998).build();
}
public static final URI BASE_URI = getBaseURI();
protected static HttpServer startServer() throws IOException {
System.out.println("Starting grizzly...");
ResourceConfig rc = new PackagesResourceConfig("share.test");
rc.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
return GrizzlyServerFactory.createHttpServer(BASE_URI, rc);
}
public static void main(String[] args) throws IOException {
HttpServer httpServer = startServer();
System.in.read();
httpServer.stop();
}
}
Hier ist die komplette Ausnahme
$ java -jar target/webServiceTest-0.0.1-SNAPSHOT.jar
Starting grizzly...
Mar 20, 2012 12:48:53 PM com.sun.jersey.api.core.PackagesResourceConfig init
INFO: Scanning for root resource and provider classes in the packages:
share.test
Mar 20, 2012 12:48:54 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Root resource classes found:
class share.test.NonJAXBBeanResource
class share.test.Hello
Mar 20, 2012 12:48:54 PM com.sun.jersey.api.core.ScanningResourceConfig init
INFO: No provider classes found.
Exception in thread "main" java.lang.IllegalArgumentException: No container provider supports the type class org.glassfish.grizzly.http.server.HttpHandler
at com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:196)
at com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:134)
at com.sun.jersey.api.container.grizzly2.GrizzlyServerFactory.createHttpServer(GrizzlyServerFactory.java:242)
at share.test.Main.startServer(Main.java:27)
at share.test.Main.main(Main.java:31)
Baue ich das jar-Paket mit maven mit
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.5</version>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>share.test.Main</Main-Class>
<Build-Number>1</Build-Number>
</manifestEntries>
</transformer>
</transformers>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Muss ich ändern, Schatten-plugin enthalten, was sonst?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Fehler sieht aus wie das plugin ist nicht die Zusammenlegung der META-INF/services werden aus verschiedenen Gläsern richtig - wenn es mehrere Dateien mit dem gleichen Namen in META-INF/services Verzeichnis verschiedener Gläser, die Sie benötigen, zusammengeführt werden, nicht ersetzt das eine durch das andere. Überprüfen Sie, ob das der Fall ist.
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
an den Transformator in der pom.xml Verweis: linkDen folgenden links, die mir geholfen herauszufinden, die Lösung unten:
besonders die Antwort
Anstatt die jar-with-dependencies als descriptorRef der assembly-plugin-Konfiguration, die Sie erstellen Sie eigene, z.B. in src/assembly/depmerge.xml (siehe unten). Diese assembly-Konfiguration hinzufügen, eine containerDescriptorHandler, das sich für den META-INF/services.
laufen
um eine jar-Datei in der Ziel, die Sie anrufen können mit
pom.xml:
src/assembly/depmerge.xml:
Ich habe gerade den dummen Fehler. Konfigurieren maven-assembly-plugin in pom als gut.
Assembly scheint zu ersetzen META-INF/services und überschreiben "com.Sonne.jersey.server.impl.container.grizzly2.GrizzlyContainerProvider
"in der Datei com.Sonne.jersey.spi.container.ContainerProvider
Als guide http://maven.apache.org/plugins/maven-assembly-plugin/ erwähnt, Wenn das Projekt will in einem Paket Artefakt in ein uber-jar, die assembly-plugin bietet nur Basis-support. Für mehr Kontrolle, verwenden Sie das Maven-Shade-Plugin.