使用maven抛出AspectJ编译抛出java.lang.NoClassDefFoundError:org / aspectj / bridge / IMessageHolder

时间:2012-02-02 14:30:59

标签: maven aspectj

尝试编译我的aspectj项目时出现以下错误。

[INFO] --- aspectj-maven-plugin:1.4:compile (default) @ jetserver ---
Feb 2, 2012 7:33:31 PM org.sonatype.guice.bean.reflect.LoadedClass
WARNING: Error injecting: org.codehaus.mojo.aspectj.AjcCompileMojo
java.lang.NoClassDefFoundError: org/aspectj/bridge/IMessageHolder
    at java.lang.Class.getDeclaredConstructors0(Native Method)

[ERROR] Failed to execute goal org.codehaus.mojo:aspectj-maven-plugin:1.4:compile (default) on project game-server: Execution default of goal org.codehaus.mojo:aspectj-maven-plugin:1.4:compile failed: Unable to load the mojo 'compile' in the plugin 'org.codehaus.mojo:aspectj-maven-plugin:1.4'. A required class is missing: org/aspectj/bridge/IMessageHolder

pom的相关部分粘贴在下面。我有什么想法可以得到这个错误吗?

<build>
    <plugins>
        <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>1.6.11</version>
                </dependency>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjtools</artifactId>
                    <version>1.6.11</version>
                </dependency>
            </dependencies>
            <configuration>
                <source>1.6</source>
                <complianceLevel>1.6</complianceLevel>
                <verbose>true</verbose>
                <showWeaveInfo>true</showWeaveInfo>
                <target>1.6</target>
                <!-- The following sets up aspectj weaving path. jetserver jar has the 
                    compiled aspect which is used to weave classes in this app -->
                <aspectLibraries>
                    <aspectLibrary>
                        <groupId>org.menacheri</groupId>
                        <artifactId>jetserver</artifactId>
                        <version>0.1</version>
                    </aspectLibrary>
                </aspectLibraries>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>test-compile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

1 个答案:

答案 0 :(得分:2)

看起来版本1.6.11存在问题。当我将其修改为1.6.1时,错误就消失了。

我的pom现在看起来像

<强>依赖关系:

<dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.6.1</version>
</dependency>

<强>插件:

<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>1.6.1</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjtools</artifactId>
        <version>1.6.1</version>
    </dependency>
</dependencies>
<configuration>
    <source>1.6</source>
    <complianceLevel>1.6</complianceLevel>
    <verbose>true</verbose>
    <showWeaveInfo>true</showWeaveInfo>
    <target>1.6</target>
</configuration>
<executions>
    <execution>
        <goals>
            <goal>compile</goal>
            <goal>test-compile</goal>
        </goals>
    </execution>
</executions>

如果您正在使用eclipse,以下maven-eclipse-plugin配置允许java src文件夹中的* .aj文件没有问题,并且在执行mvn clean时不会清除eclipse项目的ajdt属性。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.8</version>
<configuration>
    <ajdtVersion>1.6</ajdtVersion>
    <additionalProjectnatures>
        <projectnature>org.eclipse.ajdt.ui.ajnature</projectnature>
        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
        <projectnature>org.eclipse.wst.common.project.facet.core.nature</projectnature>
    </additionalProjectnatures>
    <!-- Source includes is necessary to allow aj files in the java 
        folder, else eclipse may throw a filtering exception -->
    <sourceIncludes>
        <sourceInclude>**/*.aj</sourceInclude>
    </sourceIncludes>
    <!-- Download sources will make maven download and attach source files 
        where available -->
    <downloadSources>true</downloadSources>
    <downloadJavadocs>true</downloadJavadocs>
</configuration>