问题描述
我工作的一个简单的构建脚本应该从一个Java类文件获取一些常量,并将它们作为我的文件名中的版本号。我使用Eclipse和自己的蚂蚁,但放的 BCEL-5.2.jar 的在我的libs文件夹和到类路径的蚂蚁电话。
<目标名称=generate_version依赖=编译>
&所述; loadproperties SRCFILE =$ {dir.dest} /MyVersion.class>
<&类路径GT;
<文件集DIR =$ {} dir.libs>
<包括姓名=** / BCEL的* .jar/>
< /文件集>
< /类路径>< filterchain>
< classconstants />
< / filterchain>
< / loadproperties>
< /目标与GT;
但不幸的是Ant任务的 loadproperties 的失败:
的build.xml:46:预期Java资源源
之后,我试图从外面的Eclipse运行Ant,使用此命令行:
设置ANT_HOME = C:\\ Program Files文件\\的Java \\蚂蚁\\ Apache的ANT-1.7.1
%ANT_HOME%\\ BIN \\ ant.bat
的结果是
构建文件:build.xml文件在里面:
[回应]大厦项目。
[回应] ant.home:C:\\ Program Files文件\\的Java \\蚂蚁\\ Apache的ANT-1.7.1
[回应] ant.java.version:1.6
[回应] ant.version:Apache Ant的1.7.1版本于2008年6月27日编译编译:
[javac的] 262编译源文件********** \\构建
[javac的]注:某些输入文件使用或覆盖脱precated API。
[javac的]注:重新编译-Xlint:详情德precation。
[javac的]注:某些输入文件使用未经检查或不安全的操作。
[javac的]注:重新编译-Xlint:未选中的详细信息。generate_version:构建失败
******************** \\蚂蚁\\的build.xml:46:预期Java资源源
我真的现在丢失。它是一个BCEL错误?它是一个Ant不兼容性我自己BCEL?
最后一个提示:删除从Ant目标结果BCEL类路径条目在此:
构建文件:build.xml文件在里面:
[回应]大厦项目。
[回应] ant.home:C:\\ Program Files文件\\的Java \\蚂蚁\\ Apache的ANT-1.7.1
[回应] ant.java.version:1.6
[回应] ant.version:Apache Ant的1.7.1版本于2008年6月27日编译编译:
[javac的] 262编译源文件******************** \\构建
[javac的]注:某些输入文件使用或覆盖脱precated API。
[javac的]注:重新编译-Xlint:详情德precation。
[javac的]注:某些输入文件使用未经检查或不安全的操作。
[javac的]注:重新编译-Xlint:未选中的详细信息。generate_version:构建失败
java.lang.NoClassDefFoundError的:组织/阿帕奇/ BCEL /类文件/ ClassParser
在org.apache.tools.ant.filters.util.JavaClassHelper.getConstants(JavaClassHelper.java:47)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
更新在Eclipse中设置的Ant preferences后,错误信息更改:
构建失败
********************* \\的build.xml:46:org.apache.bcel.classfile.ClassFormatException:不是Java的.class文件
在org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:115)
在org.apache.tools.ant.Task.perform(Task.java:348)
在org.apache.tools.ant.Target.execute(Target.java:357)
在org.apache.tools.ant.Target.performTasks(Target.java:385)
在org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329)
在org.apache.tools.ant.Project.executeTarget(Project.java:1298)
在org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
在org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
在org.apache.tools.ant.Project.executeTargets(Project.java:1181)
在org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:423)
在org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:137)
现在我认为这是可能的Ant和BCEL的版本冲突。或BCEL和JDK1.6。或者Eclipse和BCEL和蚂蚁或JDK ...我迷路了。
答:
这是发现低于
评论Crap, I knew it! It comes down to file encoding issues. The files are still in ISO-8819-1, but I'm using UTF-8. The project is pretty aged and was created with the wrong encoding in place. Setting the parameter encoding in the javac and loadproperties Task fixes it.
<target name="generate_version" depends="compile">
<loadproperties encoding="iso-8859-1" srcfile="${dir.dest}/MyVersion.class">
<filterchain>
<classconstants/>
</filterchain>
</loadproperties>
</target>
I thought it got changed by our Subversion server, but I think I have to convert every single file to UTF-8 myself now... think that is another question for SO.
这篇关于蚂蚁loadproperties失败(BCEL错误?)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!