2015-11-08 6 views
6

के कारण लोड नहीं किया जा सका मैं एक जावा एजेंट बना रहा हूं जिसका उपयोग कुछ कक्षाओं में कुछ बाइटकोड संशोधन करने के लिए किया जाएगा org.eclipse.jdt.core.JDTCompilerAdapter उनमें से एक है। मैं execute()org.eclipse.jdt.core.JDTCompilerAdapter की विधि को संशोधित करने के लिए जावसेट का उपयोग कर रहा हूं। तो मैं अपने एजेंट परियोजना में के रूप में शामिल किया है ECJ (Gradle का उपयोग कर)कक्षा org.eclipse.jdt.core.JDTCompilerAdapter को अमान्य निर्भरता

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

मैं ECJ से कुछ वर्गों उपयोग करने की आवश्यकता के रूप में।

एजेंट का लक्ष्य है, विधि निष्पादित करने के लिए कॉल अवरोधन कुछ प्रसंस्करण ट्रिगर करने के उद्देश्य में मेरे वर्ग के कुछ करने के लिए कुछ कॉल जोड़ने के लिए विधि पर अमल संशोधित करने के लिए है।

2 वर्गों के साथ एक सरल जावा परियोजना के खिलाफ एजेंट का परीक्षण कर रहा हूँ। परियोजना चींटी के साथ बनाई गई है और एक संकलक के रूप में JDTCompilerAdapter का उपयोग करता है।

यहाँ build.xml फ़ाइल

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

एजेंट जब एक परियोजना के निर्माण के लिए इस्तेमाल किया जा रहा है। तो एजेंट के परीक्षण के लिए मैं इस आदेश का उपयोग करें:

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

build_wrapper.sh इस में शामिल है (मैं ECJ निर्भरता को शामिल किया है के रूप में मैं bulid.xml <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/> में है तो मैं JDTCompilerAdapter के साथ इस परियोजना को संकलित कर सकते हैं:

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

विचार यह है कि एजेंट-रैपर तर्क का विश्लेषण करेगा (आउटडीर का उपयोग कुछ सामान उत्पन्न करने के लिए किया जाता है और निष्पादन मेरी टेस्ट प्रोजेक्ट के निर्माण को लॉन्च करने के लिए उपयोग की जाने वाली एक स्क्रिप्ट है) इस आदेश को build_wrapper.sh से निष्पादित करने के लिए प्राप्त करें (इसमें केस ../ant/bin/ant -lib ../eclipse/plugins/ecj-4.3.1.jar build-e) और इसे स्वयं को जावा एजेंट के रूप में कमांड में जोड़ें।

समस्या एजेंट के निष्पादन के दौरान होता है।

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 

जब मैं अपने एजेंट परियोजना के अंदर ECJ-4.3.1.jar का उपयोग नहीं करते, निर्माण अच्छी तरह से चलाता है मैं execute() विधि करने के लिए कॉल अवरोधन लेकिन मैं अन्य वर्गों का उपयोग नहीं कर सकते हैं: यहाँ उत्पादन होता है ecj जार से।

+0

कृपया देखें कि यह लिंक मदद करता है या नहीं। उस लिंक के अनुसार कक्षा पथ संघर्ष हो सकता है। https://www.liferay.com/community/forums/-/message_boards/message/43851128 – Rao

उत्तर

2

शो स्टॉपर त्रुटि "क्लास org.eclipse.jdt.core.JDTCompilerAdapter को अमान्य निर्भरता के कारण लोड नहीं किया जा सका।"

गलती पहले संकेत के लिए इस लिंक http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftask-ant_javac_adapter.htm

दूसरा संकेत हो सकता है कि JDTCompilerAdapter चलाने के लिए आवश्यक जार में से एक याद आ रही है पढ़ने से पाया जा सकता है।

जेडीटीसी कॉम्पेलर एडाप्टर काम करने के लिए मैंने जेडीटीसी कॉम्पेलरएडाप्टर.जर और org.eclipse.jdt.core.jar दोनों को एंटी/lib फ़ोल्डर में कॉपी किया।

ग्रहण का संस्करण और जो लिंक ऊपर उल्लेख में दर्ज कर रहे हैं जावा के संस्करण के आधार पर मतभेद रहे हैं।

संबंधित मुद्दे