This repository was archived by the owner on Jun 14, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.xml
199 lines (175 loc) · 9.2 KB
/
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
<project name="java-8-to-java-6-backport-experiment" default="all" basedir=".">
<description>Java 8 to Java 6 backport experiment</description>
<condition property="isMac">
<os family="mac"/>
</condition>
<property environment="env"/>
<property name="srcDir" location="src/main/java"/>
<property name="libDir" location="lib"/>
<property name="mainClass" value="test.EntryPoint"/>
<property name="targetDir" location="target"/>
<property name="antShadeJar" location="${libDir}/ant-shade-task-0.1-SNAPSHOT-jar-with-dependencies.jar"/>
<property name="retrolambdaJar" location="${libDir}/retrolambda-2.3.0.jar"/>
<property name="step01TargetDir" location="${targetDir}/01-grab"/>
<property name="step02TargetDir" location="${targetDir}/02-compile"/>
<property name="step03TargetDir" location="${targetDir}/03-merge"/>
<property name="step03TargetFile" location="${step03TargetDir}/rt8-app.jar"/>
<property name="step04TargetDir" location="${targetDir}/04-shade"/>
<property name="step04TargetFile" location="${step04TargetDir}/rt8-app-shaded.jar"/>
<property name="step05TargetDir" location="${targetDir}/05-unzip"/>
<property name="step06TargetDir" location="${targetDir}/06-retrolambda"/>
<property name="step07TargetDir" location="${targetDir}/07-zip"/>
<property name="step07TargetFile" location="${step07TargetDir}/rt8-app-shaded.jar"/>
<property name="step08TargetDir" location="${targetDir}/08-unshade"/>
<property name="step08TargetFile" location="${step08TargetDir}/rt8-app.jar"/>
<property name="step09TargetDir" location="${targetDir}/09-unpack"/>
<property name="step10TargetDir" location="${targetDir}/10-pack"/>
<property name="step10TargetFile" location="${step10TargetDir}/rt8.jar"/>
<property name="step11TargetDir" location="${targetDir}/11-pack"/>
<property name="step11TargetFile" location="${step11TargetDir}/app.jar"/>
<taskdef classpath="${antShadeJar}" resource="org/apache/tools/ant/taskdefs/shade.properties"/>
<target name="clean" description="Cleans the workspace">
<delete dir="${targetDir}"/>
</target>
<target name="init" description="Initializes the workspace">
<mkdir dir="${targetDir}"/>
</target>
<target name="01-grab" depends="init" description="Step 01: Grab some JRE 8 classes">
<unzip src="${java.home}/lib/rt.jar" dest="${step01TargetDir}">
<patternset>
<include name="java/lang/AutoCloseable.class"/>
<include name="java/lang/Iterable.class"/>
<include name="java/util/Arrays.class"/>
<include name="java/util/AbstractMap.class"/>
<include name="java/util/EnumMap.class"/>
<include name="java/util/EnumMap$**.class"/>
<include name="java/util/function/Consumer.class"/>
<include name="java/util/function/Function.class"/>
<include name="java/util/function/Supplier.class"/>
<include name="java/util/Iterator.class"/>
<include name="java/util/Map.class"/>
<include name="java/util/Objects.class"/>
<include name="java/util/Spliterator.class"/>
<include name="java/util/Spliterator$**.class"/>
<include name="java/util/Spliterators.class"/>
<include name="java/util/Spliterators$**.class"/>
<include name="java/util/stream/AbstractPipeline.class"/>
<include name="java/util/stream/BaseStream.class"/>
<include name="java/util/stream/ForEachOps.class"/>
<include name="java/util/stream/ForEachOps$**.class"/>
<include name="java/util/stream/PipelineHelper.class"/>
<include name="java/util/stream/ReferencePipeline.class"/>
<include name="java/util/stream/ReferencePipeline$**.class"/>
<include name="java/util/stream/Sink.class"/>
<include name="java/util/stream/Sink$**.class"/>
<include name="java/util/stream/Stream.class"/>
<include name="java/util/stream/StreamShape.class"/>
<include name="java/util/stream/StreamOpFlag.class"/>
<include name="java/util/stream/StreamOpFlag$**.class"/>
<include name="java/util/stream/StreamSupport.class"/>
<include name="java/util/stream/TerminalSink.class"/>
<include name="java/util/stream/TerminalOp.class"/>
</patternset>
</unzip>
</target>
<target name="02-compile" depends="01-grab" description="Step 02: Compiles the source code dependent on the grabbed JRE 8 classes">
<mkdir dir="${step02TargetDir}"/>
<javac srcdir="${srcDir}" destdir="${step02TargetDir}" source="1.8" target="1.8"/>
</target>
<target name="03-merge" depends="02-compile" description="Step 03: Merge into a single JAR in order to relocate Java 8 packages properly">
<zip basedir="${step01TargetDir}" destfile="${step03TargetFile}"/>
<zip basedir="${step02TargetDir}" destfile="${step03TargetFile}" update="true"/>
</target>
<target name="04-shade" depends="03-merge" description="Step 04: Rename java.* to ~.java.* in order to let RetroLambda work since MethodHandles require non-java packages">
<shade jar="${step03TargetFile}" uberJar="${step04TargetFile}">
<relocation pattern="java" shadedPattern="~.java">
<include value="java.lang.AutoCloseable"/>
<include value="java.lang.Iterable"/>
<include value="java.util.Arrays"/>
<include value="java.util.AbstractMap"/>
<include value="java.util.EnumMap"/>
<include value="java.util.EnumMap$**"/>
<include value="java.util.function.Consumer"/>
<include value="java.util.function.Function"/>
<include value="java.util.function.Supplier"/>
<include value="java.util.Iterator"/>
<include value="java.util.Map"/>
<include value="java.util.Objects"/>
<include value="java.util.Spliterator"/>
<include value="java.util.Spliterator$**"/>
<include value="java.util.Spliterators"/>
<include value="java.util.Spliterators$**"/>
<include value="java.util.stream.AbstractPipeline"/>
<include value="java.util.stream.BaseStream"/>
<include value="java.util.stream.ForEachOps"/>
<include value="java.util.stream.ForEachOps$**"/>
<include value="java.util.stream.PipelineHelper"/>
<include value="java.util.stream.ReferencePipeline"/>
<include value="java.util.stream.ReferencePipeline$**"/>
<include value="java.util.stream.Sink"/>
<include value="java.util.stream.Sink$**"/>
<include value="java.util.stream.Stream"/>
<include value="java.util.stream.StreamShape"/>
<include value="java.util.stream.StreamOpFlag"/>
<include value="java.util.stream.StreamOpFlag$**"/>
<include value="java.util.stream.StreamSupport"/>
<include value="java.util.stream.TerminalSink"/>
<include value="java.util.stream.TerminalOp"/>
</relocation>
</shade>
</target>
<target name="05-unzip" depends="04-shade" description="Step 05: Unpacking shaded JAR in order to let Retrolamda work">
<unzip src="${step04TargetFile}" dest="${step05TargetDir}"/>
</target>
<target name="06-retrolambda" depends="05-unzip" description="Step 06: Perform downgrade from Java 8 to Java 6 bytecode">
<java jar="${retrolambdaJar}" fork="true" failonerror="true">
<sysProperty key="retrolambda.bytecodeVersion" value="50"/>
<sysProperty key="retrolambda.classpath" value="${step05TargetDir}"/>
<sysProperty key="retrolambda.defaultMethods" value="true"/>
<sysProperty key="retrolambda.inputDir" value="${step05TargetDir}"/>
<sysProperty key="retrolambda.outputDir" value="${step06TargetDir}"/>
</java>
</target>
<target name="07-zip" depends="06-retrolambda" description="Step 07: Pack the downgraded classes back before unshading">
<zip basedir="${step06TargetDir}" destfile="${step07TargetFile}"/>
</target>
<target name="08-unshade" depends="07-zip" description="Step 08: Relocate the ~.java package back to the java package">
<shade jar="${step07TargetFile}" uberJar="${step08TargetFile}">
<relocation pattern="~.java" shadedPattern="java"/>
</shade>
</target>
<target name="09-unpack" depends="08-unshade" description="Step 09: Unpack the unshaded JAR in order to create two separate JAR files">
<unzip src="${step08TargetFile}" dest="${step09TargetDir}"/>
</target>
<target name="10-pack" depends="09-unpack" description="Step 10: Pack the downgraded Java 8 runtime classes">
<zip basedir="${step09TargetDir}" destfile="${step10TargetFile}">
<include name="java/**"/>
</zip>
</target>
<target name="11-pack" depends="09-unpack" description="Step 11: Pack the downgraded application classes">
<zip basedir="${step09TargetDir}" destfile="${step11TargetFile}">
<include name="test/**"/>
</zip>
</target>
<target name="all" depends="10-pack,11-pack" description="Does all">
<echo message="Done!"/>
</target>
<target name="run-as-java-6" description="Runs the target artifact in Java 6">
<fail unless="env.JDK_6_HOME" message="JDK_6_HOME not set"/>
<java jvm="${env.JDK_6_HOME}/bin/java" classpath="${step11TargetFile}" classname="${mainClass}" fork="true" failonerror="true">
<jvmarg value="-Xbootclasspath/p:${step10TargetFile}"/>
<arg value="foo"/>
<arg value="bar"/>
<arg value="baz"/>
</java>
</target>
<target name="run-as-java-8" description="Runs the target artifact in Java 8">
<fail unless="env.JDK_8_HOME" message="JDK_8_HOME not set"/>
<java jvm="${env.JDK_8_HOME}/bin/java" classpath="${step11TargetFile}" classname="${mainClass}" fork="true" failonerror="true">
<jvmarg value="-Xbootclasspath/p:${step10TargetFile}"/>
<arg value="foo"/>
<arg value="bar"/>
<arg value="baz"/>
</java>
</target>
</project>