一:介绍
1 2 3 4 5 6 7
| Eclipse已经实现了自己的编译器,命名为 Eclipse编译器for Java (ECJ)。
它不同于javac,Sun JDK附带的编译器。一个显着的区别是,Eclipse编译器允许您运行实际上没有正确编译的代码。如果错误的代码块从未运行,您的程序将运行良好。
另一个不同之处在于Eclipse编译器允许在Eclipse中进行增量构建IDE,也就是所有的代码一旦你完成输入就编译。
Eclipse自带的编译器也是很明显的,因为你可以编写,并且在Eclipse中运行Java代码,甚至不安装Java SDK。
|
二:在ant中使用ecj
2.1 下载和介绍
1 2
| 首先要找到ejc的jar包,在eclise的安装目录/plugins/org.eclipse.jdt.core_版本号.jar,打开此文件,里面有个jdtCompilerAdapter.jar, 下面也提供了我自己eclise下的jar包的下载地址。
|
org.eclipse.jdt.core_3.10.2.v20150120-1634.jar
jdtCompilerAdapter.jar


2.2 复制到ant的lib目录下:
1
| 将org.eclipse.jdt.core_版本号.jar和jdtCompilerAdapter.jar复制到ant安装目录/lib下。
|

2.3 修改ant bulid.xml文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 1.在javac加入compiler="org.eclipse.jdt.core.JDTCompilerAdapter" <javac srcdir="${src.dir}" destdir="${classes.dir}" encoding="UTF-8" includeantruntime="no" excludes="**/test/*,**/test/bean/*,**/*.svn,*.svn" includes="**/*.java" source="1.6" target="1.6" deprecation="true" failonerror="true" debug="true" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"> <classpath refid="classpath" /> </javac>
2.添加ant的classpath <fileset dir="${lib.dir}" includes="/Users/Jayden/my_data/my_tools/apache-ant-1.10.7/lib/*.jar"/>
windows不需要配置,mac不配置就报错。
|

2.4 完成的build.xml文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
| <?xml version="1.0" encoding="UTF-8"?> <!-- 定义一个工程,默认任务为warFile。 --> <project name="businessplanner" default="0 - default" basedir="/Users/Jayden/my_data/my_work/JavaProgram/businessplanner" xmlns:artifact="antlib:org.apache.maven.artifact.ant">
<description>package businessplanner sit war</description> <!-- 项目名称 --> <property name="project" value="businessplanner"/> <!-- 项目源代码目录 --> <property name="src.dir" location="src/main/java"/> <!-- javac编译后生成的class文件路径 --> <property name="classes.dir" location="target/ant/wars/WEB-INF/classes" /> <!-- 最终生成war包的路径 --> <property name="dist.dir" location="target/ant"/> <!-- 项目配置文件路径 --> <property name="config.dir" location="src/main/resources" /> <!-- 项目生产配置文件路径 --> <property name="prod.config.dir" location="/Users/Jayden/my_data/my_work/JavaProgram/businessplanner/doc/sit" /> <!-- 项目web页面路径 --> <property name="web.root" location="src/main/webapp" /> <!-- maven-ant-tasks 下载maven依赖jar包的存放路径 --> <property name="lib.dir" location="target/ant/wars/WEB-INF/lib"/> <!-- 项目wars路径 --> <property name="wars.dir" location="target/ant/wars" /> <path id="classpath"> <fileset dir="${lib.dir}" includes="**/*.jar"/> <fileset dir="${lib.dir}" includes="/Users/Jayden/my_data/my_tools/apache-ant-1.10.7/lib/*.jar"/> </path> <!-- 清空文件夹 --> <target name="1 - clean" description="清理ant编译文件"> <delete dir="target/ant/wars" /> </target> <!-- 创建文件夹 --> <target name="2 - makedir" description="建立文件夹"> <mkdir dir="${dist.dir}"/> <mkdir dir="${wars.dir}"/> <mkdir dir="${classes.dir}"/> <mkdir dir="${lib.dir}"/> </target> <!-- 从pom下载jar包 --> <target name="3 - lib" depends="2 - makedir" description="配置 ant 自动下载maven的依赖包 end "> <!-- 下载maven依赖--> <path id="maven-ant-tasks.classpath" path="/Users/Jayden/my_data/bat/ant/maven-ant-tasks-2.1.3.jar" /> <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="antlib:org.apache.maven.artifact.ant" classpathref="maven-ant-tasks.classpath" /> <artifact:dependencies filesetId="mavenlib" pathId="mavenclasspath" useScope="runtime"> <pom file="${basedir}/pom.xml" /> </artifact:dependencies> <!-- pom下载jar --> <copy todir="${lib.dir}"> <fileset refid="mavenlib" /> <mapper type="flatten" /> </copy> <!-- 将WEB-INF/lib下的jar包copy到lib.dir --> <copy todir="${lib.dir}"> <fileset dir="${web.root}/WEB-INF/lib" includes="**/*"/> </copy> </target> <!-- 编译代码 --> <target name="4 - compile" depends="3 - lib" description="编译代码"> <!-- 编译所有的Java代码 --> <javac srcdir="${src.dir}" destdir="${classes.dir}" encoding="UTF-8" includeantruntime="no" excludes="**/test/*,**/test/bean/*,**/*.svn,*.svn" includes="**/*.java" source="1.6" target="1.6" deprecation="true" failonerror="true" debug="true" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"> <classpath refid="classpath" /> </javac>
</target> <target name="5 - package" depends="4 - compile" description="打war包" > <tstamp> <format property="TODAY" pattern="yyyy-MM-dd HH:mm:ss"/> <format property="TIME" pattern="yyyyMMdd_HHmmss"/> </tstamp>
<!-- copy资源和页面,以及生产配置文件 --> <copy todir="${wars.dir}"> <fileset dir="${web.root}"> <exclude name="uploads/**"></exclude> <exclude name="zip/**"></exclude> <exclude name="WEB-INF/api/**"></exclude> </fileset> </copy> <!-- 移除原本的web.xml --> <delete file="${wars.dir}/WEB-INF/web.xml" /> <copy todir="${wars.dir}"> <fileset dir="${prod.config.dir}" includes="**/*"/> </copy> <echo message="生成版本号文件" /> <exec executable="version" failonerror="false" dir="${wars.dir}"></exec> <!-- 生成Web配置及部署文件 --> <jar jarfile="${dist.dir}/${project}_${TIME}_sit.war"> <fileset dir="${wars.dir}"> <include name="**/*" /> </fileset> </jar> </target>
<target name="0 - default" depends="1 - clean, 5 - package"> </target> </project>
|
三:如果报错
1
| Unable to load annotation processing manager org.eclipse.jdt.internal.compiler.apt.dispatch.BatchAnnotationProcessorManager from classpath.
|
1 2 3 4 5 6 7 8
| 将eclipse安装目录/plugins/下的这些包copy到ant/lib下: org.eclipse.jdt.annotation_2.1.100.v20170511-1408.jar org.eclipse.jdt.apt.core_3.5.50.v20170920-0950.jar org.eclipse.jdt.apt.ui_3.5.0.v20170505-1107.jar org.eclipse.jdt.compiler.apt_1.3.60.v20171129-1553.jar org.eclipse.jdt.compiler.tool_1.2.51.v20171122-1403.jar org.eclipse.jdt.core_3.13.101.v20180215-0725.jar org.eclipse.jdt.debug.ui_3.8.52.v20180104-1240.jar
|