2013-07-26 5 views
6

は、@Configurableアノテーションでマークされたクラスのコンパイル時に、newオペレータで開始されたクラスにスプリング依存性を注入できるように構成したいと考えています。私はアプリケーションサーバーのスクリプトを実行するためのアクセス権がないので、ロードタイム織りを使用したくないので、変更することはできません。また、私はテストでこのクラスを使用できるようにしたい、私はIDEからテストケースを実行することを意味します。私はウェブと春の参照の読み込み時間についての情報とコンパイル時の織りの設定については何も知りませんでした。非スプリング管理対象クラスのDI用コンパイル時間

PS。私はあなたのクラスパスに、ばねの側面を持っていることを確認しその後

  <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>aspectj-maven-plugin</artifactId> 
       <version>1.4</version> 
       <executions> 
        <execution> 
         <id>compile</id> 
         <configuration> 
          <source>${source}</source> 
          <target>${target}</target> 
          <verbose>true</verbose> 
          <aspectLibraries> 
           <aspectLibrary> 
            <groupId>org.springframework</groupId> 
            <artifactId>spring-aspects</artifactId> 
           </aspectLibrary> 
          </aspectLibraries> 
         </configuration> 
         <goals> 
          <goal>compile</goal> 
         </goals> 
        </execution> 
        <execution> 
         <id>test-compile</id> 
         <configuration> 
          <source>${source}</source> 
          <target>${target}</target> 
          <verbose>false</verbose> 
          <aspectLibraries> 
           <aspectLibrary> 
            <groupId>org.springframework</groupId> 
            <artifactId>spring-aspects</artifactId> 
           </aspectLibrary> 
          </aspectLibraries> 
         </configuration> 
         <goals> 
          <goal>test-compile</goal> 
         </goals> 
        </execution> 
       </executions> 
       <dependencies> 
        <!-- Ensure aspectj tools version used by compiler is the same version used as dependency. Avoids warning --> 
        <dependency> 
         <groupId>org.aspectj</groupId> 
         <artifactId>aspectjtools</artifactId> 
         <version>${aspectj.version}</version> 
        </dependency> 
        <dependency> 
         <groupId>org.aspectj</groupId> 
         <artifactId>aspectjweaver</artifactId> 
         <version>${aspectj.version}</version> 
        </dependency> 
       </dependencies> 
      </plugin> 

...あなたのポンポンでこのような何かが動作するはずのmaven

+0

EclipseまたはIntelliJなど? –

+0

私はEclipseを使用しています。 – maks

答えて

1

で春を使用しています。

とEclipseにaspectingについて - AJDT

+0

私はクラスパス上に春のアスペクトを持っていますが、プロジェクトをコンパイル(mvnコンパイル)しようとすると、ネストエラーが発生します: '欠落型javax.persistence.Entity'の注釈を決定できません。しかし私は自分のプロジェクトでも使用していません(私は休止状態も他のjpa互換ツールも持っていません) – maks

+0

また、私はすべてのクラスを織りようとしています( '@Configurable ') – maks

+0

また、 '$ {aspectj.version}'とは何ですか?それが意味するもののバージョン? – maks

4

をインストールするので、他の回答にも有効ですが、私はもう少し詳細にこのアプローチの意味の一部をカバーしようと思いました。

 <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>aspectj-maven-plugin</artifactId> 
      <version>1.4</version> 
      <dependencies> 
       <dependency> 
        <groupId>org.aspectj</groupId> 
        <artifactId>aspectjrt</artifactId> 
        <version>${aspectj.version}</version> 
       </dependency> 
       <dependency> 
        <groupId>org.aspectj</groupId> 
        <artifactId>aspectjtools</artifactId> 
        <version>${aspectj.version}</version> 
       </dependency> 
      </dependencies> 
      <configuration> 
       <outxmlfile>META-INF/aop.xml</outxmlfile> 
       <aspectLibraries> 
        <aspectLibrary> 
         <groupId>org.springframework</groupId> 
         <artifactId>spring-aspects</artifactId> 
        </aspectLibrary> 
       </aspectLibraries> 
       <source>1.7</source> 
       <target>1.7</target> 
       <forceAjcCompile>true</forceAjcCompile> 
      </configuration> 
     </plugin> 

、依存関係に関するいくつかの追加情報: - - :私が使用

セットアップは、基本的なレベルでこれです

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aop</artifactId> 
     <version>${dep.spring}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aspects</artifactId> 
     <version>${dep.spring}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjrt</artifactId> 
     <version>${aspectj.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjweaver</artifactId> 
     <version>${aspectj.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.persistence</groupId> 
     <artifactId>persistence-api</artifactId> 
     <version>1.0</version> 
     <scope>provided</scope> 
    </dependency> 

私はあなたが永続化APIを見逃しているとし、その製織に使用されます。

編集:関連するhttps://jira.springsource.org/browse/SPR-6819バグのバグ。これが、永続性APIが必要な理由です。

クラスがideで解凍されている場合は、織り込むためのmavenジョブを作成することもできます(これは私にとっては大変です)。

aspectj:compile 

最後に、あなたのクラスを単体テストしようとするならば、このフェーズの後にクラスを組み立てることは役に立ちます。我々はprepare-package段階で編んだ。これを行うには、

 <executions> 
       <execution> 
        <phase>prepare-package</phase> 
        <goals> 
         <goal>compile</goal> 
        </goals> 
       </execution> 
      </executions> 

プラグインに追加してください。

このアプローチをIDEでうまくやってもらうのは難しいかもしれないので、助けてください。

+0

なぜpersistance APIが必要ですか?私はそれを使用しません。そして、それがどのように製織に使用できるのか想像もできません。私は、春の側面のいくつかの側面がこのAPIで動作することを前提としています。したがって、aspectj-maven-plugingは、織りプロセスで使用されるaspectjLibrariesの具体的な側面を選択するオプションが必要です。また、なぜaspectjrtの依存関係が必要なのですか?私はロード時の織りを使用しません。 – maks

+1

こんにちは、永続性の問題のためにjiraの問題を追加しました。 – MikePatel

+0

また、アスペクトランタイムはコンパイル時に組み合わされません。 cflow pointcut指定子とthisJoinPoint操作(私が読んでいる)を避けることによって、その使用の必要性を最小限に抑えることができます。プロジェクトなどに依存関係をもう導入できない状況にありますか? – MikePatel

関連する問題