ロギング レイヤーで気の利いた遅延ロギング トリックを使用しようとしていますが、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 );
これが私のポンビットです:
<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 内では正常にコンパイルされますがmvn package
、Linux コマンド ラインから実行するとこのエラーが発生します。
さらに試行錯誤を重ねた結果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 構成では機能しないようです。