Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 批注的表达式开始非法_Java_Ant - Fatal编程技术网

Java 批注的表达式开始非法

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\

我正在使用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

java类:ECMSErrorHandlerMDB.java

下面是Ant构建文件build.xml:


这些错误与我正在使用的注释有关。
我需要做什么来修复这个Ant构建来编译我的类注释?

这本身不是Ant问题。相反,它很可能是您试图编译的一个或多个Java文件中的语法错误

如果您发布了Java源代码,我们应该能够更具体一些


我不知道问题是什么,但我可以告诉你一个事实,Ant本身并不编译Java。相反,它使用Java编译器(来自它找到的JDK)来编译Java

因此,如果您在通过Ant编译时遇到编译错误,而不是在以其他方式编译时,那么Java编译器的运行方式有一些重要的不同之处:

  • 您可能正在使用不同的编译器(来自不同的JDK)
  • 您可能导致编译器以不同的生成类路径运行
  • 您可能导致编译器以不同的源代码级别运行
第二个数据点是您得到的实际错误。它们是语法错误而不是语义错误。如果问题是构建类路径,那么可能会出现语义错误,例如,某些注释名称未知。相反,您会得到一个语法错误,表明编译器根本不理解注释。这表明问题在于编译器需要Java 1.4(或更早版本)代码

因此,我的建议是:

  • 检查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
      } );