Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 独立JAR的行为与从IDE中启动时不同_Java_Maven_Jar_Jersey_Grizzly - Fatal编程技术网

Java 独立JAR的行为与从IDE中启动时不同

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>

使用maven assembly插件,我可以将java web应用程序捆绑到一个单独的.jar中

        <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>


.

服务器的日志文件中应该有一些错误。你看过了吗?如果是,但什么都没有,您是否尝试过提高日志记录级别?服务器的日志文件中应该有一些错误。你看过了吗?如果是,但什么都没有,您是否尝试过提高日志记录级别?