2015-11-08 29 views
6

Ben org.eclipse.jdt.core.JDTCompilerAdapter bunlardan biridir bazı sınıflara bazı baytkodu değişiklik yapmak için kullanılacak bir java ajanı oluşturma ve yüklenemedi. Benorg.eclipse.jdt.core.JDTCompilerAdapter yöntemini değiştirmek için javassit kullanıyorum. Ben AAD bazı sınıfları kullanmak gerekir gibi Yani benim ajan projesinde de ECJ dahil ettikSınıf org.eclipse.jdt.core.JDTCompilerAdapter çünkü geçersiz bağımlılık

compile group: 'org.eclipse.jdt.core.compiler' ,name: 'ecj', version :'4.3.1' 

(gradle kullanarak).

ajanın hedefi, yöntemi uygulamak için çağrıları yakalamak için bazı işlemi tetikleme amacıyla içinde bazı sınıfların bazı mesajlar eklemeyi yürütmek yöntemini değiştirmektir.

Ben 2 sınıfları ile Basit java projeye karşı ajan test ediyorum. Proje karınca ile oluşturuldu ve bir derleyici olarak JDTCompilerAdapter kullanıyor. İşte

Build.xml dosyasını

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<project basedir="." default="build" name="TestProject"> 
<property file="build.properties" /> 

<property name="debuglevel" value="source,lines,vars"/> 
<property name="target" value="1.7"/> 
<property name="source" value="1.7"/> 
<path id="PClasspath"> 
    <pathelement location="bin"/> 
</path> 


<target name="init"> 
    <mkdir dir="bin"/> 
    <copy includeemptydirs="false" todir="bin"> 
     <fileset dir="src"> 
      <exclude name="**/*.java"/> 
     </fileset> 
    </copy> 
</target> 
<target name="clean"> 
    <delete dir="bin"/> 
</target> 
<target depends="clean" name="cleanall"/> 
<target depends="init" name="build"> 

    <javac debug="true" debuglevel="${debuglevel}" destdir="bin" includeantruntime="false" source="${source}" target="${target}"> 
     <src path="src"/> 
     <classpath refid="PClasspath"/> 

    </javac> 
</target> 
<!-- 
<target description="copy Eclipse compiler jars to ant lib directory" name="init-eclipse-compiler"> 
    <copy todir="${ant.library.dir}"> 
     <fileset dir="${ECLIPSE_JDT_CORE}" includes="*.jar"/> 
    </copy> 
</target>--> 
<target name="build-e" > 

    <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/> 
    <antcall target="build"/> 
</target> 

ajan bir proje oluştururken kullanılacak olmasıdır. Yani ajan test etmek için bu komutu kullanın:

java -jar agent-wrapper.jar --outdir ./out --exec ./build_wrapper.sh 

build_wrapper.sh bu içeriyor (Ben bulid.xml <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/> sahip olarak bu yüzden JDTCompilerAdapter ile projeyi derlemek olabilir ecj bağımlılığını ekledik:

../ant/bin/ant -lib ../eclipse/plugins/ecj-4.3.1.jar build-e 

Ajan-wrapper argüman ayrıştırmak olacaktır (outdir bazı şeyler üretmek için kullanılır ve exec benim test projenin bir derleme başlatmak için kullanılan bir betiktir) build_wrapper.sh (bu işte yürütülecek Durum ../ant/bin/ant -lib ../eclipse/plugins/ecj-4.3.1.jar build-e) ve kendisine kendini java ajanı olarak ekleyin.

sorun maddenin uygulanması sırasında meydana gelir.

java -jar custom-agent.jar --outdir ./out --exec ./build_wrapper.sh        [10:18:53] 
Picked up JAVA_TOOL_OPTIONS: -javaagent:/Users/dev/TestAgent/project/custom-agent.jar=OUTDIR=/Users/dev/TestAgent/project/./out 
objc[30474]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/bin/java and /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined. 
Buildfile: /Users/dev/TestAgent/project/build.xml 

build-e: 

init: 
    [mkdir] Created dir: /Users/dev/TestAgent/project/bin 

build: 

BUILD FAILED 
/Users/dev/TestAgent/project/build.xml:47: The following error occurred while executing this line: 
/Users/dev/TestAgent/project/build.xml:32: Class org.eclipse.jdt.core.JDTCompilerAdapter could not be loaded because of an invalid dependency. 

Total time: 2 seconds 
abnormal termination, exit code: 1 

benim ajan proje içinde ecj-4.3.1.jar kullanmayın, inşa iyi çalışır ben execute() yöntemine çağrı yolunu kesmek ama diğer sınıfları kullanamazsınız: İşte çıkış olduğunu ecj kavanozdan.

+0

bakınız. Bu bağlantıya göre sınıf yolu çakışması olabilir. https://www.liferay.com/community/forums/-/message_boards/message/43851128 – Rao

cevap

2

gösteri tıpa hatası "Sınıf org.eclipse.jdt.core.JDTCompilerAdapter çünkü geçersiz bağımlılık yüklenemedi" dir. hatalı

Birinci ipucu bu bağlantıyı http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftask-ant_javac_adapter.htm

ikinci ipucu JDTCompilerAdapter çalıştırmak için gerekli kavanoz biri eksik olduğunu olabilir okumaktan ileri olur.

JDTCompilerAdapter'i işe almak için hem JDTCompilerAdapter.jar hem de org.eclipse.jdt.core.jar dosyasını ant/lib klasörüne kopyaladım.

Tutulma sürümü ve yukarıda belirtilen bağlantı belgelenmiştir java sürümünü temel farklılıklar vardır. Bu bağlantı yardımcı olur

İlgili konular