我正在使用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\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
@MessageDriven( activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination",
propertyValue = Constants.CALLS_QUEUE_LOOKUP),
@ActivationConfigProperty(propertyName = "maxSession",
propertyValue = "50"),
@ActivationConfigProperty(propertyName = "transactionTimeout",
propertyValue = "30000"),
} )
public class ECMSDispatcherMDB implements MessageListener
{
Logger logger = Logger.getLogger("ecms.log");
private static final String TAG = "ECMSDispatcherMdb";
ConnectorManager connectorManager = ConnectorManager.getInstance();
@EJB
private ECMSEntityManagerDaoLocal dao;
...
java类: ECMSErrorHandlerMDB.java
@MessageDriven( activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination",
propertyValue = Constants.ERORR_QUEUE_LOOKUP),
@ActivationConfigProperty(propertyName = "maxSession",
propertyValue = "50"),
} )
public class ECMSErrorHandlerMDB implements MessageListener
{
Logger logger = Logger.getLogger("ecms.log");
private static final String TAG = "ECMSErrorHandlerMDB";
ConnectorManager connectorManager = ConnectorManager.getInstance();
@EJB
private ECMSEntityManagerDaoLocal dao;
...
这是Ant构建文件 build.xml :
<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="ECMS Ant" basedir="." default="create ear">
<property file="build.properties" />
<path id="base.path">
<fileset dir="${project.lib}">
<include name="**/*.jar" />
</fileset>
<fileset dir="${project.lib2}">
<include name="**/*.jar" />
</fileset>
</path>
<target name="clean" description="Delete all generated files">
<delete dir="${ejb.classes.dir}" />
<delete dir="${web.classes.dir}" />
<delete dir="${deploy.dir}" />
</target>
<target name="ejb.compile" description="Compiles the Task" depends="clean">
<mkdir dir="${ejb.classes.dir}" />
<javac srcdir="${ejb.src.dir}" destdir="${ejb.classes.dir}">
<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}">
<classpath>
<path refid="base.path" />
<path refid="${ejb.classes.dir}" />
</classpath>
</javac>
</target>
<target name="create jar" description="create jar" depends="ejb.compile">
<!-- new jars-->
<jar destfile="${deploy.dir}/ecmsejb.jar">
<fileset dir="${ejb.classes.dir}">
<!-- include the folders: facade -->
</fileset>
<metainf dir="${ejb.src.dir}/META-INF" >
<!--exclude name="*application.xml" /-->
</metainf>
</jar>
</target>
<target name="create war" description="Creates war file" depends="web.compile">
<war warfile="${deploy.dir}/ecmsweb.war"
webxml="${web.project.root}/WebRoot/WEB-INF/web.xml">
<webinf dir="${web.project.root}/WebRoot/WEB-INF/" />
<classes dir="${web.classes.dir}">
<!-- include the folders: webServices -->
</classes>
<classes dir="${web.project.root}/WebRoot/WEB-INF/classes" />
</war>
<!--delete dir="${project.root}/WebRoot/WEB-INF/classes/META-INF" /-->
</target>
<target name="create ear" description="create ear" depends="create war">
<ear destfile="${deploy.dir}/ecms.ear"
appxml="${project.root}/META-INF/application.xml">
<fileset dir="${deploy.dir}" />
<metainf dir="${project.root}/META-INF" />
</ear>
</target>
</project>
错误与我正在使用的注释有关。 我需要做些什么来修复这个Ant构建来编译我的类Annotations?
答案 0 :(得分:22)
看起来你的注释数组中有尾随逗号,javac视图为非法 - 与“正确”数组不同。 (有一个bug in eclipse不会报告这些。)
删除尾随逗号,例如:
@MessageDriven(activationConfig =
{ @ActivationConfigProperty( ... ),
@ActivationConfigProperty( ... ),
@ActivationConfigProperty( ... ),
@ActivationConfigProperty( ... ) // no comma here
} );
答案 1 :(得分:0)
这不是Ant问题本身。相反,它很可能是您尝试编译的一个或多个Java文件中的语法错误。
如果您发布了Java源代码,我们应该能够更加具体。
我不知道问题是什么,但我可以告诉你一个事实,Ant不会编译Java本身。相反,它使用Java编译器(来自它找到的JDK)来编译Java。
因此,如果您在通过Ant编译时遇到编译错误,但是在编译其他方式时则没有,那么有关Java编译器运行方式的重要内容:
第二个数据点是您获得的实际错误。它们是语法错误而不是语义错误。如果问题是构建类路径,那么你会期望语义错误(例如)说某些注释名称是未知的。相反,您会收到一个语法错误,表明编译器根本不理解注释。这表明问题在于编译器期待Java 1.4(或更早版本)代码。
所以我的建议是:
<javac>
任务的Ant文档,查看Sun javac手册条目以确保您正确执行。答案 2 :(得分:0)
您是否为javac
定义了不同的来源?
由于建议始终为source
任务指定javac
属性,因此可能会指定一些过时的版本。
如果您的Ant脚本例如使用源级别 1.4 进行编译,则您将不会使用泛型或注释。
在build.xml
中找到类似的内容:
<javac ... source="1.x" ... />
编辑:为Ant设置源级别的另一种方法是使用系统属性ant.build.javac.source
,但我怀疑是这种情况。
答案 3 :(得分:0)
这强烈指向Java编译级别,@ DR已经回答了它。尝试两件事:
$ANT_HOME/bin
添加到系统路径,其中$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>