使用Java 8类供应商时Aspectj出现编译错误

时间:2015-04-20 14:37:52

标签: java maven environment-variables aspectj aspectj-maven-plugin

我试图在我的日志记录层中使用一些漂亮的懒惰日志技巧但是AspectJ却在窒息。我在log4j前面有一个门面。这是代码:

public void debug ( Supplier<String> message )
{
    if( isDebugEnabled() )
    {
        debug( message.get() );
    }
}

错误:

[ERROR] The type java.util.function.Supplier cannot be resolved. It is indirectly referenced from required .class files
        /home/Build/src/Core/Database/src/com/BasicDao.java:1006
LOGGER.debug( "Retry number: "+retryCount+"DB Lock Conflict, sleeping "+retrySleepTime );

这是我的pom位:

<plugin>
    <!-- This plugin integrates aspectj into our build cycle -->
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <version>1.7</version>
    <configuration>
        <complianceLevel>1.8</complianceLevel>
        <source>1.8</source>
        <target>1.8</target>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjtools</artifactId>
            <version>1.8.5</version>
        </dependency>
    </dependencies>
    <executions>
        <execution>
            <phase>process-sources</phase>
            <goals>
                <goal>compile</goal>
                <goal>test-compile</goal>
            </goals>
         </execution>
    </executions>
</plugin>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.5</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.8.5</version>
        </dependency>

其他有趣的事实是,这在Eclipse中编译得很好,但是从Linux命令行运行mvn package时出现此错误。

在进一步的试验/错误后,我们发现如果我们手动将JAVA_HOME设置为指向Java 8,那么它就会编译。看起来AspectJ要求您的JAVA_HOME指向正确的Java版本。在主要的pom中,我们指示maven使用特定版本的Java:

<executable>${JAVA_1_8_HOME}/bin/javac</executable>
<jvm>${JAVA_1_8_HOME}/jre/bin/java</jvm>

这些似乎都不适用于aspectj-maven-plugin配置。

0 个答案:

没有答案