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
<?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.
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