EDIT:上記javaee-endorsed-api
のアプローチは、おそらく正常に動作しますが、それは私にウィリーズを与えます。私はそれがもはや生産され、維持されているとは思わない。さらに、pom.xml
には、javaee-compact-api
という名前のポイントが含まれていることが反映されており、実装クラスを削除する方法がわかります。対照的に、あなたが推奨するAPI jarをチェリーピックすることは、より安定した柔軟性があるように思われます。最後に、まだjavaee-endorsed-api
のアプローチを使用する場合は、引き続き推奨する一般的なアプローチを使用して、代わりにjavaee-endorsed-api.jar
を指定してください。 Ryan;
Ryan;私は、あなたが長い旅路を同じ道のりで(StackOverflow、java.netフォーラムなどに触れて)同じ道を歩いているだけです。
ユニットテストまたはインテグレーションテストでは、わかっているようにjava.endorsed.dirs
システムプロパティを設定する必要があります。
これは、テストを実行しているJVMがこれを実行するような方法で行う必要があります。それはあなたが確実に走っているかどうかによって決まります。
Surefireがに設定されていない場合は、フォークではありません。これはおそらく悪いことです。ここで設定を再評価する必要があります。
あなたはフォークに確実なセットを持っている場合は、あなたは、単にこのように、systemPropertyVariables
スタンザでjava.endorsed.dirs
を含めることができると思うかもしれません:
<systemPropertyVariables>
<java.endorsed.dirs>weWillGetToThisInAMoment</java.endorsed.dirs>
</systemPropertyVariables>
...しかし、それは間違っているだろう。その理由は、実際に実行されているプログラムがForkedBooter
と呼ばれており、ForkedBooter
がプログラムで単位テストのシステムプロパティを設定しているためです。つまり、<systemPropertyVariables>
スタンザがForkedBooter
によって読み取られるまでには、それはすでに遅すぎます。
しかし、あなたはこのようなあなたの確実な設定で<argLine>
を使用することができます。
<configuration>
<argLine>-Djava.endorsed.dirs=weWillGetToThisInAMoment</argLine>
</configuration>
今
シュアフォークは、その承認のディレクトリが適切に設定されているだろうことをVM
。さて、どのような価値を提供するかについて話しましょう。
オーバーライドするAPIを選択してチェリーしたいとします。あなたの場合、javax.annotation.*
は正当な選択です。関連するjarが格納されているローカルMavenリポジトリのディレクトリを指定したいとします。
${settings.localRepository}${file.separator}org${file.separator}glassfish${file.separator}main${file.separator}javaee-api${file-separator}javax.annotation${file.separator}${javaxAnnotationVersion}
あなたはこのすべてを行うたら、その後、シュアフォークVMは、あなたのユニットテストを実行する際に、承認ディレクトリは今javax.annotation
クラスを収容するjarファイルを含む、ローカルのMavenリポジトリ内のディレクトリに設定することになりますプロセス中で実行中の埋め込みGlassFish — —は、Java SE 6バージョンの代わりにjavax.annotation
のJava EE 6バージョンを使用します。これがあなたを助けることを願っています。
あなたが言ったことは(IMO)それは動作するはずですが、Java SEの古いライブラリがロードされているときに「最初の試合」のシナリオを勝ち取っています。誰でもJVMを起動するにはjava.endorsed.dirsを設定する必要がありますが、組み込みコンテナの中にはいくつか難しいものがあります。 Glassfish Embeddedの場合、すべてが1つの大きなJARにあり、保証されたライブラリが特定の場所にあることが保証されているとは思われません。私は[Arquillian thread](http://community.jboss.org/thread/168521?tstart=0)を立ち上げ、彼らの考えを見ました。私は[Glassfishのバグ](http://java.net/jira/browse/EMBEDDED_GLASSFISH-131)を追加しました。 –
@ Ryan J.私はあなたのバグレポートを見て、それは確かに再現性があります。これは私の以前の投稿の精神に従い、GlassFishチームによって修正されるべきですが、これを修正できるまで、いくつかの簡単な回避策があります: 1.メインクラスを使用してサーバーを起動します。 2.他の埋め込みコンテナに切り替えます。 3. MAVEN_OPTSを使用して承認されたライブラリを設定します(ugglyですが、すぐに行かれます)。 –