2016-12-03 3 views
1

内から起動したとき、私は、コマンドにスタンドアロンJARには、Mavenのアセンブリ・プラグインを使用してIDE

$ mvn clean compile assembly:single 

使用して、単一のstandalone.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> 

を私のJava Webアプリケーションをバンドルできるよりも動作が異なりますアプリケーションは、グリズリーとジャージーに基づくRESTバックエンドです。

$ java -jar standalone.jar 

を使用して起動できます。コンソールの出力から、HTTPサーバーが起動し、ポート8765でリッスンしていることがわかります。

残念ながら、RESTエンドポイントのいずれかにリクエストを送信すると、エラーコード500の内部サーバーエラーが返されます。 出力から結論づけることができるので、要求処理メソッドのどれも呼び出されません。

IDE IntelliJ内から(起動ボタンを押して)起動すると、アプリケーションは正常に動作します。

同様の質問がJava JAR behaving differently to program run out of IDEを頼まれたが、中に示唆されているように私の場合にはフラグもIDEによって設定されているの-Dfile.encoding = UTF-8は

EDIT

問題を解決していませんコメント、私はログの出力を検査しようとしました。私は最高のログレベルとIDEからアプリケーションを実行すると、私は例外を含む追加メッセージをたくさん受けるGrizzly Standalone Logging

で説明した手法を以下ました

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) 

私は、任意の追加のログを得ることはありません-Djava.util.logging.config.file = ...を使ってstandalone.jarを実行したときに表示されるメッセージ

+0

サーバーのログファイルには、何らかのエラーがあるはずです。見たことがありますか?はいの場合、何もなかった場合は、ログレベルを上げようとしましたか? –

答えて

0

あなたのjarファイルは、その中にパッケージ化された必要なすべての依存ファイルとともにパッケージされているとは限りません。原因となるクラスorg.osgi.framework.BundleReferenceが実際にあなたのjarに含まれているかどうか最初にチェックしてください。

もしそうでなければ、あなたのポームに欠けているものがあると思います。あなたのアセンブリのプラグイン定義にsimple目標の実行を含めて、もう一度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> 

documentationを参照してください。

関連する問題