私はSpringのトランザクションコードを織り込むためにaspectjでコンパイル時の織りを使用しているので、@Transactional
. Eclipse (aspectj-maven-plugin を使用) 内から maven compile を実行すると、Eclipse は Tomcat サーバーと同期し、すべてがうまくいきます。
しかし、Eclipse がコンパイル (プロジェクト -> 自動的にビルド) すると、Spring トランザクション コードが織り込まれていないように見え、次のエラーが発生します。
javax.persistence.TransactionRequiredException: no transaction is in progress
これは非常に面倒です。なぜなら、Eclipse が毎回コンパイルされた後に手動で maven compile を呼び出さずにコーディングしたいだけだからです。
AJDT プラグインの Aspect Path または inPath を編集する必要がありますか? Eclipse がビルドに maven を使用しないのはなぜですか?
私は使っている:
- エクリプス WTP インディゴ
- 春 3.0.5.リリース
- JDK7 & Tomcat 7
- m2eclipse & AJDT プラグイン
これらは、私の pom.xml の関連するフラグメントです。
<!-- AspectJ -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.6.11</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.11</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>org.springframework.aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
<scope>compile</scope>
</dependency>
<!-- Compile time weaving -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<executions>
<execution>
<id>compile</id>
<configuration>
<source>1.6</source>
<target>1.6</target>
<verbose>true</verbose>
<outxml>true</outxml>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
</configuration>
<goals>
<goal>compile</goal>
</goals>
</execution>
<!-- omitted test-compile part -->
</executions>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.11</version>
</dependency>
</dependencies>
</plugin>