2015-01-31 2 views
0

필자는 maven Java EE 6 프로젝트를 보유하고 있으며 모든 메소드에 로거 정보를 콘솔에 매개 변수와 끝으로 시작하도록 표시했습니다.Maven 프로젝트에서 Loggin을 위해 AspectJ를 사용하는 방법은 무엇입니까?

몇 가지 방법으로 나는 모든 aspect 메소드의 시작과 끝을 관리하기 위해 aspectJ를 사용하기를 원한다는 것을 잊어 버렸습니다.

저는 Jboss EAP6을 서버로 사용하고 Jboss developper Studio를 IDE로 사용했지만 그물에 약간의 tuturials를 발견했지만 항상 스프링 또는 java aspactJ 프로젝트에 대해 이야기합니다. 내 IDE에 plugin aspectJ를 설치했는데 내 maven 프로젝트가 aspectJ 프로젝트가 아니라는 것을 알려주는 측면을 추가하려고했는데 어떻게 해결할 수 있습니까?

이 내 받는다는의 pom.xml

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

<repositories> 
    <repository> 
     <id>snapshots</id> 
     <name>repo1-maven</name> 
     <url>http://central.maven.org/maven2</url> 
    </repository> 
    <repository> 
     <id>JBoss repository</id> 
     <url>http://repository.jboss.org/nexus/content/groups/public/</url> 
    </repository> 
</repositories> 

<build> 
    <pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>aspectj-maven-plugin</artifactId> 
       <version>1.4</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>compile</goal> 
          <goal>test-compile</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <source>${maven.compiler.source}</source> 
        <target>${maven.compiler.target}</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.5.1</version> 
       <configuration> 
        <source>${maven.compiler.source}</source> 
        <target>${maven.compiler.target}</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </pluginManagement> 
</build> 

이 내 인터페이스 :

public class ClientImpl implements IClient { 
    private List<ClientBean> ListOfCustomers; 

    public ClientImpl() { 
     setListOfCustomers(new ArrayList<ClientBean>()); 
    } 

    public void addClient(ClientBean clt) { 
     ListOfCustomers.add(clt); 
    } 

    public List<ClientBean> getListOfCustomers() { 
     return ListOfCustomers; 
    } 

    public void setListOfCustomers(List<ClientBean> listOfCustomers) { 
     ListOfCustomers = listOfCustomers; 
    } 
} 

이 내가 내를 만들려고 whitch 클래스입니다 :이 구현은

public interface IClient { 
    void addClient(ClientBean clt); 
} 

aspectJ :

@Aspect 
public class ClientAspect { 
    @Pointcut("execution(* *.*(..))") 
    void anyCallMethod() {} 

    @Before(value = "anyCallMethod()") 
    public void befor(JoinPoint joinPoint) { 
     System.out.println("Before, class: " 
       + joinPoint.getSignature().getDeclaringType().getSimpleName() 
       + ", method: " + joinPoint.getSignature().getName()); 
    } 

    @After(value = "anyCallMethod()") 
    public void after(JoinPoint joinPoint) { 
     System.out.println("After, class: " 
       + joinPoint.getSignature().getDeclaringType().getSimpleName() 
       + ", method: " + joinPoint.getSignature().getName()); 
    } 
} 

는 내가 테스트하는 사람이 클래스가 있고 난 내 프로젝트를 실행할 때 그것은 나를 콘솔에 로그인 NOS 제공

답변

1

당신의 POM에 몇 가지 문제가 있습니다

  • [주요]은 AspectJ Maven PluginpluginManagement 섹션에서만 구성하면 적용되지만 실제로는 plugins 섹션에서는 사용하지 마십시오.
  • [매체]의 오래된 버전 1.4를 사용합니다. AspectJ Maven 플러그인은 기본적으로 AspectJ 컴파일러 1.6.11을 사용합니다. AspectJ 1.8.2를 기반으로하는 현재 플러그인 버전 1.7을 사용하는 것이 좋지만, 플러그인의 dependencies 하위 섹션에서 현재 버전 1.8.4를 사용하도록 재정의 될 수 있습니다. 1.8.4 1.8.2와 비교하여 몇 가지 수정 사항이 포함되어 있습니다.
  • [작은] AspectJ를 런타임 프로젝트의 의존성이 AspectJ를 메이븐 플러그인에 의해 사용되는 버전과 일치해야합니다.
  • [minor]aspectjweaver에 대한 프로젝트 종속성은 로딩 타임에 대해서만 필요합니다. 컴파일 타임 짜기의 경우 이미 플러그인을 사용하며 런타임 중에는 aspectjrt 만 있으면됩니다.

업데이트 : 여기

내 자신의 프로젝트 중 하나에서 샘플 설정이다 (자바 SE, 아니 애플리케이션 서버, 그러나 동일해야) :

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <java.source-target.version>1.7</java.source-target.version> 
    <aspectj.version>1.8.4</aspectj.version> 
</properties> 

<build> 
    <pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.2</version> 
       <configuration> 
        <source>${java.source-target.version}</source> 
        <target>${java.source-target.version}</target> 
        <!-- IMPORTANT --> 
        <useIncrementalCompilation>false</useIncrementalCompilation> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>aspectj-maven-plugin</artifactId> 
       <version>1.7</version> 
       <configuration> 
        <showWeaveInfo>true</showWeaveInfo> 
        <source>${java.source-target.version}</source> 
        <target>${java.source-target.version}</target> 
        <Xlint>ignore</Xlint> 
        <complianceLevel>${java.source-target.version}</complianceLevel> 
        <encoding>${project.build.sourceEncoding}</encoding> 
        <verbose>true</verbose> 
       </configuration> 
       <executions> 
        <execution> 
         <!-- IMPORTANT --> 
         <phase>process-sources</phase> 
         <goals> 
          <goal>compile</goal> 
          <goal>test-compile</goal> 
         </goals> 
        </execution> 
       </executions> 
       <dependencies> 
        <dependency> 
         <groupId>org.aspectj</groupId> 
         <artifactId>aspectjtools</artifactId> 
         <version>${aspectj.version}</version> 
        </dependency> 
       </dependencies> 
      </plugin> 
     </plugins> 
    </pluginManagement> 

    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>aspectj-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjrt</artifactId> 
      <version>${aspectj.version}</version> 
      <scope>runtime</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

<dependencies> 
    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjrt</artifactId> 
    </dependency> 
</dependencies> 
+0

무엇 Aspect Maven 플러그인을 적용하려면 주요 문제를 해결할 수 있습니까? – TinyOS

+0

당신은' ...'섹션에서 구성 버전 및 기타 설정을 참조 AspectJ를-받는다는 - 플러그인'(버전 플러그인없이) 추가 섹션' org.codehaus.mojo이 필요합니다. 나는 나의 자신의 프로젝트 중 하나의 견본으로 나의 대답을 업데이트 할 것이다. 내 견본은 모든 문제를 전공에서 부전공으로 해결합니다. 나는 이것이 당신을 위해 좋다는 것을 희망한다. 그렇다면 동의하고 upvote 내 대답. – kriegaex

+0

고맙습니다. 메인 클래스를 실행하면 로그가 생깁니다. 내 다른 전쟁 프로젝트가 작동하지 않기를 바랍니다. 인터페이스 프로젝트, 구현 프로젝트 및 전쟁 프로젝트 – TinyOS

관련 문제