从命令运行ant脚本,发生错误:找不到类:org.eclipse.jdt.core.JDTCompilerAdapter

时间:2012-05-09 02:35:32

标签: java ant eclipse-jdt

在我的java web项目中,有像<T>这样的代码,在ant脚本中,javac使用JDK编译java代码,并且无法编译成功。

后来,我知道必须使用eclipse JDT进行编译。

并且,在eclipse中,ant脚本可以运行成功。当这样运行时:

右键单击build.xml ---&gt;运行---&gt;以---&gt;运行在“外部工具配置”中,单击“JRE”,选择“在与工作区相同的JRE中运行”。

之后,蚂蚁可以在日食中成功运行。

但是,我想写一个.bat和.sh文件来调用ant脚本,编译,编辑,部署和启动Tomcat。 所以,ant应该从命令运行。我尝试了更多,总是发生错误: 未找到类:org.eclipse.jdt.core.JDTCompilerAdapter

PS,我在eclipse插件中将关于JDT的jar文件复制到ant_home / lib目录。

祝你的回答。提前谢谢!

的build.xml

`                                                                 

<tstamp>
    <format property="build.time" pattern="yyyy-MM-dd" />
</tstamp>

<path id="project.classpath">
    <fileset dir="${lib.dir}">
        <include name="**/*.jar" />
    </fileset>
    <fileset dir="${catalina.home}/lib">
        <include name="*.jar" />
    </fileset>
    <fileset dir="${ant.dir}">
        <include name="**/*.jar" />
    </fileset>
</path>

<target name="clear">
    <delete dir="${build.dir}" />
    <delete dir="${dist.dir}" />
    <delete file="${catalina.home}/webapps/${webapp.name}.war" />
    <delete dir="${catalina.home}/webapps/${webapp.name}" />
</target>

<target name="init" depends="clear">
    <mkdir dir="${build.dir}/classes" />
    <mkdir dir="${dist.dir}" />
</target>

<target name="compile" depends="init">
    <echo message="begin compile..." />
    <javac srcdir="${src.dir}" destdir="${build.dir}/classes" 
        includeantruntime="false" nowarn="on" 
        source="1.6" target="1.6" deprecation="true" debug="true" 
        encoding="UTF-8" classpathref="project.classpath">
        <compilerarg line="-Xlint:unchecked" />
    </javac>
    <copy todir="${build.dir}">
        <fileset dir="${src.dir}">
            <include name="**/*.xml" />
            <include name="**/*.properties" />
            <include name="**/*.sql" />
        </fileset>
        <fileset dir="${config.dir}">
            <include name="**/*.xml" />
            <include name="**/*.properties" />
            <include name="**/*.sql" />
        </fileset>
    </copy>
    <echo message="end compile..." />
</target>

<target name="war" depends="compile">
    <echo message="begin war..." />
    <war destfile="${dist.dir}/${webapp.name}.war" basedir="${webRoot.dir}" 
        webxml="${webRoot.dir}/WEB-INF/web.xml">
        <lib dir="${lib.dir}" />
        <classes dir="${build.dir}/classes" />
        <fileset dir="${webRoot.dir}">
            <include name="***.*" />
        </fileset>
    </war>
    <echo message="end war..." />
</target>

<target name="deploy" depends="war">
    <echo message="begin deploy..." />
    <copy file="${dist.dir}/${webapp.name}.war"    todir="${catalina.home}/webapps" />
    <echo message="end deploy..." />
</target>

</project>

`

3 个答案:

答案 0 :(得分:1)

请勿使用eclipse IDE中的ant从命令行使用。

单独下载ant并将其解压缩到 - C:\ apache \ ant - 用于windows,并将其bin目录放在PATH中。它会附带一些需要添加到CLASSPATH的罐子。

对于Mac OSX,“sudo port install ant”可以处理所有事情。

答案 1 :(得分:1)

从Eclipse下载ecj * .jar并放入ANT_HOME / lib下。 确保在shell环境下设置了ANT_HOME,或者应该在shell上的CLASSPATH中设置ecj * .jar。 (否则,找不到类:org.eclipse.jdt.core.JDTCompilerAdapter可能仍然被抛出。)

答案 2 :(得分:0)

对于记录,当在<javac>上下文中使用<parallel>任务与该编译器适配器时,即在多线程情况下,我也会随机获得此错误(通常更常用)。

看起来好像编译器适配器jar暂时被锁定,并且线程类加载器无法访问它。我还没有解决方法,除了删除&lt; parallel>执行。