我使用编译时编织与aspectj编织Spring的事务代码,所以我可以使用@Transactional
。当我从Eclipse内部运行maven编译(使用aspectj-maven-plugin)时,eclipse会同步到tomcat服务器,一切顺利。
但是当Eclipse编译(project->自动构建)时,似乎没有编织spring事务代码,我得到了这个错误:
javax.persistence.TransactionRequiredException: no transaction is in progress
这非常烦人,因为我只是想编码而不是每次eclipse编译后都不会手动调用maven编译。
我是否需要编辑AJDT插件的Aspect Path或inPath?为什么Eclipse只使用maven来构建?
我正在使用:
这些是我的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>
答案 0 :(得分:3)
我正在处理与我正在进行的项目相同的问题。简而言之:对于您正在使用的工具集,您需要启用加载时编织或使用Eclipse的早期版本。目前,m2e Eclipse插件和aspectj-maven-plugin与最新版本的Eclipse集成存在问题。最糟糕的是m2e的人并不真正关心,因为他们不使用AspectJ。
以下是该问题的一些链接:
答案 1 :(得分:0)
除自动编译外,您还应检查是否已启用JDT编织插件。
窗口|喜好;单击JDT Weaving部分 - 验证它当前是否已启用。当您第一次安装插件时,它会询问您是否要启用此插件,但如果您回答“否”,则可以将其关闭。