老鬼的博客 来都来啦,那就随便看看吧~
ant设置javac使用eclipse编译器
发布于: 2020-03-27 更新于: 2020-03-27 分类于:  阅读次数: 

一:介绍

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

1.png

2.png

2.2 复制到ant的lib目录下:

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

3.png

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不配置就报错。

4.png

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
*************感谢您的阅读*************