Муравейная весна - PullRequest
       2

Муравейная весна

0 голосов
/ 30 октября 2018

Итак, в основном моя ситуация такова:

У меня довольно большой проект на работе, и я должен создать его с помощью ant. Мы используем Lombok, поэтому я не могу просто скомпилировать его с помощью ajc (как я выяснил, ajc не может использовать обработку аннотаций, поэтому мне нужно сначала скомпилировать его с Java, а затем сплетить с аспектами в форме двоичного файла .class).

В Intellij код компилируется просто отлично, но когда я запускаю ant build, я сталкиваюсь с ошибкой pjp: [aspectj:iajc] [error 3]: error at C:\DBO-Server\java\DBO-Server\jk-out!by\bps\sbolbusiness\loggers\pointcut\BaseServiceLogger.class::0 use of ProceedingJoinPoint is allowed only on around advice (arg 1 in (before(extraFlags: 2): (@annotation(by.bps.sbolbusiness.loggers.annotations.EnableAudit) && persingleton(by.bps.sbolbusiness.loggers.pointcut.BaseServiceLogger))->void by.bps.sbolbusiness.loggers.pointcut.BaseServiceLogger.watchBefore(org.aspectj.lang.JoinPoint, by.bps.sbolbusiness.loggers.annotations.EnableAudit)))

Итак, насколько я понимаю, моя проблема

ProceedingJoinPoint разрешен только на ближайших советах

в

watchBefore (org.aspectj.lang.JoinPoint, by.bps.sbolbusiness.loggers.annotations.EnableAudit))

Суть в том, что, как вы видите, в этом методе нет ProceedingJoinPoint ! Только просто JoinPoint

@Aspect
@Slf4j
public class BaseServiceLogger {
....
@Pointcut("@annotation(by.bps.sbolbusiness.loggers.annotations.EnableAudit)&&@annotation(marker)")
    public void logService(EnableAudit marker) {}

    @Before(value = "logService(marker)", argNames = "jp,marker")
    public void watchBefore(JoinPoint jp, EnableAudit marker) {
        startMessage(jp, marker);
    }
....
}

Вот мой build.xml

<?xml version="1.0"?>
<project xmlns:aspectj="antlib:org.aspectj" name="SBOL-Business" default="build">
<property name="src" location="jk-src"/>
<property name="out" location="jk-out"/>
<property name="a-out" location="jk-a"/>
<property name="libs" location="..\..\Shared\lib"/>
<property name="webLibs" location="C:\Program Files\Apache Tomcat\current\lib"/>
<property name="daoSrc" location="..\..\Shared\Dao"/>
<property name="constantsSrc" location="..\..\Shared\Constants"/>
<property environment="env"/>
<target name="assemble">
    <mkdir dir="${src}"/>
    <copy todir="${src}">
        <fileset dir="src"/>
    </copy>
    <copy todir="${src}">
        <fileset dir="${daoSrc}"/>
    </copy>
    <copy todir="${src}">
        <fileset dir="${constantsSrc}"/>
    </copy>
</target>
<target name="compile.javac" depends="assemble">
    <mkdir dir="${out}"/>
    <javac srcdir="${src}" destdir="${out}" includeantruntime="false" encoding="UTF-8" debug="true">
        <classpath>
            <fileset dir="${libs}">
                <include name="**/*.jar"/>
            </fileset>
            <fileset dir="${webLibs}">
                <include name="**/*.jar"/>
            </fileset>
        </classpath>
    </javac>
</target>
<target name="compile.aspectj" depends="compile.javac">
    <mkdir dir="${a-out}"/>
    <aspectj:iajc source="1.8" destDir="jk-a" XnoInline="false">
        <inpath>
            <pathelement location="${out}" />
        </inpath>
        <classpath>
            <fileset dir="${libs}">
                <include name="**/*.jar" />
            </fileset>
            <fileset dir="${webLibs}">
                <include name="**/*.jar" />
            </fileset>
        </classpath>
    </aspectj:iajc>
</target>
<target name="clean" depends="compile.aspectj">
    <delete dir="${src}"/>
    <delete dir="${out}"/>
    <delete dir="${a-out}"/>
</target>
<target name="build" depends="clean"/>

Здесь аннотировано @ EnableAudit пример:

@EnableAudit(additionaInfo = true, serviceName = "Request AccountsQueryRq") 
public GetOrgUserAccountsOverviewRs process(String loginName, Long customerId) {
    //Method code
}

А вот аспект .java класса:

package by.bps.sbolbusiness.loggers.pointcut;

import by.bps.sbolbusiness.loggers.annotations.EnableAudit;
import by.bps.sbolbusiness.loggers.utils.LogLevel;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.util.StopWatch;

@Aspect
@Slf4j
public class BaseServiceLogger {
    private  StopWatch sw;
    //Some variables
    @Pointcut("@annotation(by.bps.sbolbusiness.loggers.annotations.EnableAudit)&&@annotation(marker)")
    public void logService(EnableAudit marker) {}

    @Before(value = "logService(marker)", argNames = "jp,marker")
    public void watchBefore(JoinPoint jp, EnableAudit marker) {
        startMessage(jp, marker);
    }

    @AfterReturning(value = "logService(marker)", argNames = "marker")
    public void watchAfter(EnableAudit marker) {
         finishMessage(marker);
    }

    @AfterThrowing(value = "logService(marker)", argNames = "marker")
    public void watchAfterException(EnableAudit marker) {
        throwingMessage(marker);
    }

    private void startMessage(JoinPoint jp, EnableAudit marker) {
        //Long code
    }

    private void finishMessage(EnableAudit marker) {
        //More long code here
    }

    private void throwingMessage(EnableAudit marker) {
        //And more code
    }

    private void details(JoinPoint jp, StringBuilder sb) {
        //Some other code here    
    }

}

Учитывая, что код компилируется и работает с IDE просто отлично, я предполагаю, что что-то не так с моим скриптом сборки. Может кто-нибудь, пожалуйста, помогите мне с этим? Может быть, есть какой-то параметр, который мне нужно передать в iajc или что-то еще? В этот момент я попробовал все, что мог, но безуспешно

Edit: журнал вывода ant:

    Buildfile: C:\DBO-Server\java\DBO-Server\build.xml

assemble:
     [copy] Copying 1 file to C:\DBO-Server\java\DBO-Server\jk-src

compile.javac:
    [javac] Compiling 4 source files to C:\DBO-Server\java\DBO-Server\jk-out

compile.aspectj:
[aspectj:iajc] MessageHolder:  (2908 info)  (96 error) 
[aspectj:iajc] [error   0]: error at by\bps\sbolbusiness\loggers\pointcut\BaseServiceLogger.java::0 the parameter marker is not bound in [all branches of] pointcut
[aspectj:iajc] [error   1]: error at by\bps\sbolbusiness\loggers\pointcut\BaseServiceLogger.java::0 the parameter marker is not bound in [all branches of] pointcut
[aspectj:iajc] [error   2]: error at by\bps\sbolbusiness\loggers\pointcut\BaseServiceLogger.java::0 the parameter marker is not bound in [all branches of] pointcut
[aspectj:iajc] [error   3]: error at C:\DBO-Server\java\DBO-Server\jk-out!by\bps\sbolbusiness\loggers\pointcut\BaseServiceLogger.class::0 use of ProceedingJoinPoint is allowed only on around advice (arg 1 in (before(extraFlags: 2): (@annotation(by.bps.sbolbusiness.loggers.annotations.EnableAudit) && persingleton(by.bps.sbolbusiness.loggers.pointcut.BaseServiceLogger))->void by.bps.sbolbusiness.loggers.pointcut.BaseServiceLogger.watchBefore(org.aspectj.lang.JoinPoint, by.bps.sbolbusiness.loggers.annotations.EnableAudit)))
[aspectj:iajc] [error   4]: error at C:\DBO-Server\java\DBO-Server\jk-out!by\bps\sbolbusiness\loggers\pointcut\BaseServiceLogger.class::0 use of ProceedingJoinPoint is allowed only on around advice (arg 0 in (afterReturning: (@annotation(by.bps.sbolbusiness.loggers.annotations.EnableAudit) && persingleton(by.bps.sbolbusiness.loggers.pointcut.BaseServiceLogger))->void by.bps.sbolbusiness.loggers.pointcut.BaseServiceLogger.watchAfter(by.bps.sbolbusiness.loggers.annotations.EnableAudit)))
    ... about 70+ identical lines ...
[aspectj:iajc] [error  94]: error at C:\DBO-Server\java\DBO-Server\jk-out!by\bps\sbolbusiness\loggers\pointcut\BaseServiceLogger.class::0 use of ProceedingJoinPoint is allowed only on around advice (arg 0 in (afterReturning: (@annotation(by.bps.sbolbusiness.loggers.annotations.EnableAudit) && persingleton(by.bps.sbolbusiness.loggers.pointcut.BaseServiceLogger))->void by.bps.sbolbusiness.loggers.pointcut.BaseServiceLogger.watchAfter(by.bps.sbolbusiness.loggers.annotations.EnableAudit)))
[aspectj:iajc] [error  95]: error at C:\DBO-Server\java\DBO-Server\jk-out!by\bps\sbolbusiness\loggers\pointcut\BaseServiceLogger.class::0 use of ProceedingJoinPoint is allowed only on around advice (arg 0 in (afterThrowing: (@annotation(by.bps.sbolbusiness.loggers.annotations.EnableAudit) && persingleton(by.bps.sbolbusiness.loggers.pointcut.BaseServiceLogger))->void by.bps.sbolbusiness.loggers.pointcut.BaseServiceLogger.watchAfterException(by.bps.sbolbusiness.loggers.annotations.EnableAudit)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...