Я использую AspectJ для контроля доступа к полям и изменения поля. У меня есть проект gradle, который компилирует два аспекта и пакет, которые объединяются вместе с аспектным и аспектным файлом в затененной банке с помощью теневого плагина gradle. агент по-прежнему является org.aspectj.weaver.loadtime.Agent. все работает нормально, но когда я пытаюсь переместить пакеты aspectj, я получаю сообщение об ошибке.
Конфигурация теневого плагина:
shadowJar {
relocate 'org.aspectj', 'shadow.org.aspectj'
relocate 'aj.org.objectweb.asm', 'shadow.aj.org.objectweb.asm'
}
манифест:
jar {
manifest {
attributes("Premain-Class": "shadow.org.aspectj.weaver.loadtime.Agent",
"Can-Redefine-Classes": true,
"Can-Retransform-Classes":true)
}
}
Это декомпилированный класс аспект, поэтому он кажется правильным:
package com.vfunction.singletonanalysis;
import shadow.org.aspectj.lang.JoinPoint;
import shadow.org.aspectj.lang.NoAspectBoundException;
import shadow.org.aspectj.lang.annotation.Aspect;
import shadow.org.aspectj.lang.annotation.Before;
@Aspect
public class StaticFieldBeforeAccessAspect extends AbstractFieldAccessAspect {
public StaticFieldBeforeAccessAspect() {
}
@Before("callAt()")
public void before(JoinPoint joinPoint) throws Throwable {
this.printJoinPoint(joinPoint);
}
public static StaticFieldBeforeAccessAspect aspectOf() {
if (ajc$perSingletonInstance == null) {
throw new NoAspectBoundException("com.vfunction.singletonanalysis.StaticFieldBeforeAccessAspect", ajc$initFailureCause);
} else {
return ajc$perSingletonInstance;
}
}
public static boolean hasAspect() {
return ajc$perSingletonInstance != null;
}
static {
try {
ajc$postClinit();
} catch (Throwable var1) {
ajc$initFailureCause = var1;
}
}
}
Но я все еще получаю сообщение об ошибке при попытке запустить тестовую программу, заявив, что найденный тип не является аспектом:
[[email protected]] info AspectJ Weaver Version 1.8.12 built on Friday Oct 20, 2017 at 21:58:11 GMT
[[email protected]] info register classloader [email protected]
[[email protected]] info using configuration file:***/workspace/singleton-analysis/agent/build/libs/agent-1.0.0-SNAPSHOT-all.jar!/META-INF/aop.xml
[[email protected]] info register aspect com.vfunction.singletonanalysis.StaticFieldModifyAspect
[[email protected]] error The specified aspect 'com.vfunction.singletonanalysis.StaticFieldModifyAspect' cannot be found
[[email protected]] info register aspect com.vfunction.singletonanalysis.StaticFieldAccessAspect
[[email protected]] error The specified aspect 'com.vfunction.singletonanalysis.StaticFieldAccessAspect' cannot be found
[[email protected]] info register aspect com.vfunction.singletonanalysis.StaticFieldBeforeAccessAspect
[[email protected]] error Cannot register 'com.vfunction.singletonanalysis.StaticFieldBeforeAccessAspect' because the type found with that name is not an aspect