2011-09-30 2 views
0

나는이 프로젝트를 AspectJ (ajc)와 올바르게 짜맞추는데 어려움을 겪고있다. 여기에 상황이 있습니다 :여러 개의 jar에 같은 aspect 제작

저는 DaCapo Benchmarks라고 불리는 벤치마킹 라이브러리를 사용하고 있습니다. Iterator.HasNext()와 Next() [학술 연구]에 대한 모든 호출을 가로 채려고합니다. 이것은 진공 상태에서 작동하는 것처럼 보입니다. 그러나 DaCapo는 자신의 jar 파일에 다른 jar 파일이 들어있는 방식으로 작동합니다. 따라서 다른 Jar 파일을 추출 할 때 어떤 종속 파일과 함께 실행하고 실행할지에 따라 추출합니다.

HasNext()와 Next()를 동일한 가로 채로 가로 채기를 원해서 내 합계가 각 개별 파일 대신 모든 jar 파일에서 추적됩니다.

나는 분명히 알기를 바랍니다. 나는이 괴괴 망측 한 문제를 통해 나를 도울 수 있기 위해 가질 수있는 질문에 대답 할 수있는 충분한 기회를 얻었습니다.

P. 나는 그것이 실제로 가능하지 않은 이상한 느낌을 가지고 있지만, AJDT (DaCapo Benchmarks 직조를 위해 ajc로 raw aspectj를 사용하고 있음)와 함께 일식 테스트는 가능성을 암시합니다.

답변

0

로딩 타임 짜기를 사용하는 경우 이것이 가능하지 않을 수 있습니다. 원형 문제가 있습니다. JDK를 만들 필요가 있지만 위버는 자체를로드하기 위해 JDK가 필요하므로 JDK의 많은 부분을 LTW를 사용하여 만들 수 없습니다.

그래서 컴파일 시간 짜기가 필요합니다. 이 같은 것이 작동합니다.

ajc -inpath rt.jar -outjar woven_rt.jar *.aj 

내가 가지고있는 문제인지 확실하지 않지만 문제를 해결할 수 있습니다.

1

너무 늦기는하지만 다른 사람에게 도움이 될 수 있음을 알고 있습니다. .

귀하의 질문에서 이해가 되었더라도 무엇이든 여러 개의 병에서 동일한 부분을 물결 치고 싶다는 것입니다.

그런 다음 화면 프로젝트를 생성하고 속성으로 이동> 왼쪽 패널에서 화면 빌드 옵션>에서 선택 INPATH 탭을 클릭합니다 :

은 그래서 당신은 이클립스를 사용하는 경우 2 가지 방법

  1. 있다 오른쪽 패널> 이제 외부 항아리 추가를 클릭하십시오> aspect를 웨이브 할 항아리를 추가하십시오> OK를 클릭하십시오

    다시 속성으로 이동> 왼쪽 패널에서 aspect 빌드 옵션을 클릭하십시오> 오른쪽 패널에서 jar 탭 출력을 선택하십시오 > 만들려는 새 항아리의 이름입니다. .> 확인을 클릭하십시오.

    애스 팩트를 작성하고 작성하고 프로젝트를 빌드하거나 정리하십시오. "output jar"에 지정한 이름으로 프로젝트의 루트 디렉토리에 jar 파일을 생성합니다.이 jar 파일은 inpath 항아리에서 aspect 파일을 사용하여 제공 한 모든 항아리를 갖습니다. . 그게 전부 야. .

    1. 당신은 명령 후 확인 절차 사용하는 경우

      AJC -inpath의 myJar1.jar : 명령 프롬프트에서 다음 명령을 지금

      당신이 원하는 차단 mehtods에 대한 측면을 쓰기> 화재. -inpath myJar2.jar myAspect.java -outjar MyOutputJar.

    그게 항아리 그것은 당신이 INPATH에 mentioined 모든 항아리와 최종 항아리를 생성합니다. . 코드를 물결 치려는 많은 항아리만큼 -inpath를 사용할 수 있습니다. 종속성 오류의 경우 classpath에 필요한 종속성 병을 제공하십시오.

관련 문제