Java 独立JAR的行为与从IDE中启动时不同
使用maven assembly插件,我可以将java web应用程序捆绑到一个单独的.jar中Java 独立JAR的行为与从IDE中启动时不同,java,maven,jar,jersey,grizzly,Java,Maven,Jar,Jersey,Grizzly,使用maven assembly插件,我可以将java web应用程序捆绑到一个单独的.jar中 <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>my.package.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>standalone</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</plugin>
该应用程序是一个基于grizzly和jersey的REST后端。
我可以用电脑启动它
$ java -jar standalone.jar
这似乎奏效了。控制台输出告诉我HTTP服务器已经启动,现在正在监听端口8765
不幸的是,当我向任何REST端点发送请求时,我收到一个错误代码为500的响应。
正如我从输出中得出的结论,没有调用任何请求处理方法
如果从IDE IntelliJ中启动应用程序(通过按run按钮),则该应用程序可以正常工作
有人问了类似的问题,但在我的例子中,同样由IDE设置的标志-Dfile.encoding=UTF-8并不能解决问题
编辑
正如评论中所建议的,我已尝试检查日志输出。我遵循了中描述的方法
当我以最好的日志记录级别从IDE运行应用程序时,我会收到很多额外的消息,包括异常
Dez 03, 2016 11:36:07 PM org.glassfish.jersey.internal.util.ReflectionHelper$2 run
FINER: Unable to load class org.osgi.framework.BundleReference using the current class loader.
java.lang.ClassNotFoundException: org.osgi.framework.BundleReference
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at org.glassfish.jersey.internal.util.ReflectionHelper$2.run(ReflectionHelper.java:262)
at org.glassfish.jersey.internal.util.ReflectionHelper$2.run(ReflectionHelper.java:247)
at java.security.AccessController.doPrivileged(Native Method)
at org.glassfish.jersey.internal.util.ReflectionHelper.<clinit>(ReflectionHelper.java:1471)
at org.glassfish.jersey.server.ResourceConfig$State.<init>(ResourceConfig.java:112)
at org.glassfish.jersey.server.ResourceConfig.<init>(ResourceConfig.java:353)
at my.package.Main.main(Main.java:42)
Dez 032016 11:36:07 PM org.glassfish.jersey.internal.util.ReflectionHelper$2运行
更精细:无法使用当前类加载器加载类org.osgi.framework.BundleReference。
java.lang.ClassNotFoundException:org.osgi.framework.BundleReference
位于java.net.URLClassLoader.findClass(URLClassLoader.java:381)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:424)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:357)
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(Class.java:264)
位于org.glassfish.jersey.internal.util.ReflectionHelper$2.run(ReflectionHelper.java:262)
位于org.glassfish.jersey.internal.util.ReflectionHelper$2.run(ReflectionHelper.java:247)
位于java.security.AccessController.doPrivileged(本机方法)
位于org.glassfish.jersey.internal.util.ReflectionHelper.(ReflectionHelper.java:1471)
位于org.glassfish.jersey.server.ResourceConfig$State。(ResourceConfig.java:112)
位于org.glassfish.jersey.server.ResourceConfig.(ResourceConfig.java:353)
在my.package.Main.Main(Main.java:42)中
当我使用-Djava.util.logging.config.file=…执行standalone.jar时,我没有收到任何额外的日志消息。我怀疑您的jar中是否包含了所有必需的依赖项。首先检查导致类
org.osgi.framework.BundleReference
是否实际包含在您的jar中
如果不是,我想你的pom里少了些什么。在程序集插件定义中包含一个简单的目标执行,然后再次运行Maven:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
...
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
.我怀疑您的jar中是否包含了所有必需的依赖项。首先检查导致类org.osgi.framework.BundleReference
是否实际包含在您的jar中
如果不是,我想你的pom里少了些什么。在程序集插件定义中包含一个简单的目标执行,然后再次运行Maven:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
...
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
.服务器的日志文件中应该有一些错误。你看过了吗?如果是,但什么都没有,您是否尝试过提高日志记录级别?服务器的日志文件中应该有一些错误。你看过了吗?如果是,但什么都没有,您是否尝试过提高日志记录级别?