मैं एक साधारण निर्माण स्क्रिप्ट पर काम कर रहा हूं जिसे जावा क्लास फ़ाइल से कुछ स्थिरांक प्राप्त करना चाहिए और उन्हें मेरे फ़ाइल नामों में संस्करण संख्या के रूप में उपयोग करना चाहिए। मैं ग्रहण और अपनी खुद की चींटी का उपयोग करता हूं, लेकिन मेरे libs फ़ोल्डर में और एंटी कॉल के लिए क्लासपाथ में bcel-5.2.jar डालता हूं।चींटी लोडप्रोपर्टीज विफल रही (बीसेल त्रुटि?)
<target name="generate_version" depends="compile">
<loadproperties srcfile="${dir.dest}/MyVersion.class">
<classpath>
<fileset dir="${dir.libs}">
<include name="**/bcel*.jar"/>
</fileset>
</classpath>
<filterchain>
<classconstants/>
</filterchain>
</loadproperties>
</target>
लेकिन दुर्भाग्य से चींटी कार्य loadproperties विफल रहता है:
build.xml:46: expected a java resource as source
उसके बाद मैं इस कमांड लाइन का उपयोग कर ग्रहण बाहर से चींटी भागने की कोशिश की,:
set ANT_HOME=C:\Program Files\Java\ant\apache-ant-1.7.1
"%ANT_HOME%\bin\ant.bat"
परिणाम है
Buildfile: build.xml
init:
[echo] Building project.
[echo] ant.home: C:\Program Files\Java\ant\apache-ant-1.7.1
[echo] ant.java.version: 1.6
[echo] ant.version: Apache Ant version 1.7.1 compiled on June 27 2008
compile:
[javac] Compiling 262 source files to **********\build
[javac] Note: Some input files use or override a deprecated API.
[javac] Note: Recompile with -Xlint:deprecation for details.
[javac] Note: Some input files use unchecked or unsafe operations.
[javac] Note: Recompile with -Xlint:unchecked for details.
generate_version:
BUILD FAILED
********************\ant\build.xml:46: expected a java resource as source
मैं वास्तव में अब खो गया हूँ। क्या यह एक बीएसएल त्रुटि है? क्या यह मेरे अपने बीएसएल के साथ एक चींटी असंगतता है?
एक आखिरी संकेत: इस में चींटी लक्ष्य परिणामों से BCEL classpath प्रविष्टि को निकालना:
Buildfile: build.xml
init:
[echo] Building project.
[echo] ant.home: C:\Program Files\Java\ant\apache-ant-1.7.1
[echo] ant.java.version: 1.6
[echo] ant.version: Apache Ant version 1.7.1 compiled on June 27 2008
compile:
[javac] Compiling 262 source files to ********************\build
[javac] Note: Some input files use or override a deprecated API.
[javac] Note: Recompile with -Xlint:deprecation for details.
[javac] Note: Some input files use unchecked or unsafe operations.
[javac] Note: Recompile with -Xlint:unchecked for details.
generate_version:
BUILD FAILED
java.lang.NoClassDefFoundError: org/apache/bcel/classfile/ClassParser
at org.apache.tools.ant.filters.util.JavaClassHelper.getConstants(JavaClassHelper.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
अद्यतन ग्रहण में चींटी प्राथमिकताओं को सेट करने के बाद, त्रुटि संदेश बदल दिया है:
BUILD FAILED
*********************\build.xml:46: org.apache.bcel.classfile.ClassFormatException: is not a Java .class file
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:115)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:357)
at org.apache.tools.ant.Target.performTasks(Target.java:385)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329)
at org.apache.tools.ant.Project.executeTarget(Project.java:1298)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:423)
at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:137)
अब मुझे लगता है कि यह शायद चींटी और बीसीईएल के बीच एक संस्करण संघर्ष है। या बीसीईएल और जेडीके 1.6। या ग्रहण और बीसीईएल और चींटी या जेडीके ... मैं खो गया हूँ।
उत्तर:
यह टिप्पणी नीचे
मैं इस उल्लेख किया जाना चाहिए था पाया है - आप कुछ भी बदलने की आवश्यकता नहीं है। डॉक्टर: "एंट 1.7 के बाद, चरित्र एन्कोडिंग आईएसओ -885 9 -1 अक्षरों से बाइट्स में कनवर्ट करने के लिए उपयोग किया जाता है, इसलिए जावा क्लास फ़ाइल पढ़ने के लिए इस एनकोडिंग का उपयोग करना है।" यह केवल सम्मेलन है जो इस तथ्य को प्राप्त करने के लिए है कि कच्चे बाइट्स पर एक वर्ण फ़िल्टर का उपयोग किया जा रहा है। ant.apache.org/manual/CoreTypes/... यूटीएफ -8 का उपयोग करना बुरा होगा! - मैकडॉवेल
मुझे लगता है कि यह बीसीईएल और जेडीके के साथ कुछ संगतता समस्याओं के लिए नीचे आ जाएगा। "जावा। क्लास फ़ाइल नहीं है" एक विसंगति वर्ग संस्करण (पहले 4 बाइट्स .class) को इंगित करता है जिसे बीसीईएल द्वारा मान्यता प्राप्त नहीं है। मैं फिर से जेडीके 1.4 के साथ संकलन करने की कोशिश करता हूं। – cringe