Java 批注的表达式开始非法
我正在使用Ant进行构建,我遇到以下错误:Java 批注的表达式开始非法,java,ant,Java,Ant,我正在使用Ant进行构建,我遇到以下错误: Buildfile: ...\build.xml clean: [delete] Deleting directory D:\IdanWorkSpace\ECMSEJB\classes ejb.compile: [mkdir] Created dir: D:\IdanWorkSpace\ECMSEJB\classes [javac] Compiling 26 source files to D:\IdanWorkSpace\ECMSEJB\
Buildfile: ...\build.xml
clean:
[delete] Deleting directory D:\IdanWorkSpace\ECMSEJB\classes
ejb.compile:
[mkdir] Created dir: D:\IdanWorkSpace\ECMSEJB\classes
[javac] Compiling 26 source files to D:\IdanWorkSpace\ECMSEJB\classes
[javac] ...\src\com\mirs\ecms\mdb\ECMSDispatcherMDB.java:28: illegal start of expression
[javac] })
[javac] ^
[javac] ...\src\com\mirs\ecms\mdb\ECMSErrorHandlerMDB.java:25: illegal start of expression
[javac] }
[javac] ^
[javac] 2 errors
java类:ECMSDispatcherMDB.java
java类:ECMSErrorHandlerMDB.java
下面是Ant构建文件build.xml:
这些错误与我正在使用的注释有关。
我需要做什么来修复这个Ant构建来编译我的类注释?这本身不是Ant问题。相反,它很可能是您试图编译的一个或多个Java文件中的语法错误 如果您发布了Java源代码,我们应该能够更具体一些
我不知道问题是什么,但我可以告诉你一个事实,Ant本身并不编译Java。相反,它使用Java编译器(来自它找到的JDK)来编译Java 因此,如果您在通过Ant编译时遇到编译错误,而不是在以其他方式编译时,那么Java编译器的运行方式有一些重要的不同之处:
- 您可能正在使用不同的编译器(来自不同的JDK)
- 您可能导致编译器以不同的生成类路径运行
- 您可能导致编译器以不同的源代码级别运行
- 检查Ant是否配置为使用最新的JDK。检查Ant安装和环境变量,如Ant文档中所述
- 检查您是否在Ant build.xml文件中正确设置了编译器源代码级别。阅读有关
任务的Ant文档,并查看Sun javac手册条目,以确保您的操作正确
- 您是否为
javac
定义了不同的源代码级别
由于建议始终为javac
任务指定source
属性,因此此处可能指定了一些过时的版本
例如,如果您的Ant脚本使用源代码级别1.4进行编译,则不会有泛型或注释
在build.xml中查找类似的内容:
<javac ... source="1.x" ... />
编辑:另一种为Ant设置源代码级别的方法是使用系统属性Ant.build.javac.source
,但我怀疑这里的情况是这样的。这强烈指向Java编译级别,@DR已经回答过了。尝试两件事:
下载最新的ANT,将其添加到系统路径,其中,$ANT_HOME
是ANT所在的目录(bin所在的目录下)。删除对任何其他ANT的引用
打开build.xml,查看添加了javac
(编译)任务的块。确保它看起来像这样
<target name="ejb.compile" description="Compiles the Task" depends="clean">
<mkdir dir="${ejb.classes.dir}" />
<javac
srcdir="${ejb.src.dir}"
destdir="${ejb.classes.dir}"
fork="true"
source="1.6"
target="1.6">
<classpath>
<path refid="base.path" />
</classpath>
</javac>
</target>
<target name="web.compile" description="Compiles the Task" depends="ejb.compile">
<mkdir dir="${web.classes.dir}" />
<javac
srcdir="${web.src.dir}"
destdir="${web.classes.dir}"
fork="true"
source="1.6"
target="1.6">
<classpath>
<path refid="base.path" />
<path refid="${ejb.classes.dir}" />
</classpath>
</javac>
</target>
看起来注释数组中有尾随的逗号,javac将其视为非法的,这与“正确”数组不同。(有一家公司没有这样报告。)
删除后面的逗号,例如:
@MessageDriven(activationConfig =
{ @ActivationConfigProperty( ... ),
@ActivationConfigProperty( ... ),
@ActivationConfigProperty( ... ),
@ActivationConfigProperty( ... ) // no comma here
} );
请发布一个或多个与这些消息相关的源代码片段。当您使用javac-version
时,您会看到什么?很可能您使用的是Java1.4或更低版本。如果您有Java5或更高版本,请将ANT中的编译级别更改为您拥有的Java版本。我得到了JavaC1.6.0_11,您在哪里设置ANT的编译级别?我编辑我的问题。虽然没有ANT编译很好。我如何检查/更改javac的源代码级别?通常源代码级别取自运行ANT脚本的JVM,除非您在javac
任务上使用source
属性。(更多细节:)我的构建xml中没有这一行。我将把build.xml添加到我试图添加source=“1.6”的问题中。你是对的,该死,这怎么可能是真的?我正在使用MyEclipse7.0。现在处理eclipse编译器的所有错误会让人恼火
<javac ... source="1.x" ... />
<target name="ejb.compile" description="Compiles the Task" depends="clean">
<mkdir dir="${ejb.classes.dir}" />
<javac
srcdir="${ejb.src.dir}"
destdir="${ejb.classes.dir}"
fork="true"
source="1.6"
target="1.6">
<classpath>
<path refid="base.path" />
</classpath>
</javac>
</target>
<target name="web.compile" description="Compiles the Task" depends="ejb.compile">
<mkdir dir="${web.classes.dir}" />
<javac
srcdir="${web.src.dir}"
destdir="${web.classes.dir}"
fork="true"
source="1.6"
target="1.6">
<classpath>
<path refid="base.path" />
<path refid="${ejb.classes.dir}" />
</classpath>
</javac>
</target>
@MessageDriven(activationConfig =
{ @ActivationConfigProperty( ... ),
@ActivationConfigProperty( ... ),
@ActivationConfigProperty( ... ),
@ActivationConfigProperty( ... ) // no comma here
} );