Spring Beanファクトリで管理されていないオブジェクトに@Inject経由で参照を挿入するためにSpring-AOPサポートを使用しています。たとえば:リリースビルドでのみ動作していないMavenのSpring-AOP @Inject
@Configurable(preConstruction=true)
class DefaultContent implements Content
{
@Inject @Nonnull
private Site site;
@Inject @Nonnull
private ModelFactory modelFactory;
public DefaultContent (final @Nonnull FileObject file)
{
resource = modelFactory.createResource(file); // <--here
}
私は静的コード製織を使用しています。
私はすべての関連技術をよく知っていると思いますが、これは実際に正常に動作します。通常の開発サイクル(Mavenの場合)です。昨日私はリリース(Mavenリリースプラグイン付き)を用意しました。リリースのバイナリは、ここで 'here'とマークされた行にNPEを取得するため、注入に失敗したようです。
昨日まで私のプロジェクトはスナップショットモード(1.0-ALPHA-2-SNAPSHOT)になっていました。スナップショット作業のバイナリ。 1.0-ALPHA-2のバイナリは、リリースモードではありません。次のスナップショットのバイナリ、1.0-ALPHA-3-SNAPSHOTが再び動作します。唯一のブラックホールはリリースされたバイナリです。 diffを見ると、SNAPSHOTとリリースの違いはありませんが、モジュールのバージョンラベルは違います。
これまでのところ、「plain」ビルドのタグ付きソースから1.0-ALPHA-2を再作成してもバイナリがバグであるため、Mavenリリースプロセス中に問題が発生していることは除外しました(つまり、mvn clean installだけです)。また、1.0-ALPHA-2と1.0-ALPHA-3-SNAPSHOTのコードを比較して、エラーのあるクラスの有効なソース(ポストウェーブ)を調べるためにJavaデコンパイラを使用しました。彼らは同じように見えます。最後に、私はバイナリ(Jetty内で実行されている.warファイル)を比較しました。同じ項目が含まれています(つまり、依存性が欠落していない、唯一の違いは別のバージョンのjarファイルです)。
この時点で私は他に何を試していいのかわからないので、このバグをよく理解するにはいくつかの提案が必要です。
実際に泉に注射を依頼しましたか? IIRCではデフォルトではありません(そして、@ Beanを見るだけですが、Springにオブジェクトを導入してBeanに変換するために '@ Configuration'を使うことができます)。 –
私が言ったように、MavenモジュールがSNAPSHOTとしてバージョン管理されているとき、コードは完全に機能します。 beans.xmlには、注射をオンにするのに必要なものがすべてあります(そうでなければ、スナップショットではうまくいきません)。 –