Changeset 18308 in josm


Ignore:
Timestamp:
2021-11-04T00:54:29+01:00 (2 years ago)
Author:
Don-vip
Message:

fix #21510 - Enable Multi-Release Jars (MRJAR - JEP 238 - patch by taylor.smock)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/build.xml

    r18180 r18308  
    9494        <!-- For Java specific stuff by version -->
    9595        <condition property="isJava9"><matches string="${ant.java.version}" pattern="(1.)?(9|1[0-9])" /></condition>
    96         <condition property="isJava10"><matches string="${ant.java.version}" pattern="1[0-9]" /></condition>
    97         <condition property="isJava11"><matches string="${ant.java.version}" pattern="1[1-9]" /></condition>
    98         <condition property="isJava12"><matches string="${ant.java.version}" pattern="1[2-9]" /></condition>
    99         <condition property="isJava13"><matches string="${ant.java.version}" pattern="1[3-9]" /></condition>
    100         <condition property="isJava14"><matches string="${ant.java.version}" pattern="1[4-9]" /></condition>
    101         <condition property="isJava16"><matches string="${ant.java.version}" pattern="1[6-9]" /></condition>
    102         <condition property="isJava18"><matches string="${ant.java.version}" pattern="1[8-9]" /></condition>
     96        <condition property="isJava10"><matches string="${ant.java.version}" pattern="(1|2)[0-9]" /></condition>
     97        <condition property="isJava11"><matches string="${ant.java.version}" pattern="1[1-9]|[2-9][0-9]" /></condition>
     98        <condition property="isJava12"><matches string="${ant.java.version}" pattern="1[2-9]|[2-9][0-9]" /></condition>
     99        <condition property="isJava13"><matches string="${ant.java.version}" pattern="1[3-9]|[2-9][0-9]" /></condition>
     100        <condition property="isJava14"><matches string="${ant.java.version}" pattern="1[4-9]|[2-9][0-9]" /></condition>
     101        <condition property="isJava16"><matches string="${ant.java.version}" pattern="1[6-9]|[2-9][0-9]" /></condition>
     102        <condition property="isJava18"><matches string="${ant.java.version}" pattern="1[8-9]|[2-9][0-9]" /></condition>
     103        <condition property="isJava19"><matches string="${ant.java.version}" pattern="19|[2-9][0-9]" /></condition>
     104        <condition property="isJava20"><matches string="${ant.java.version}" pattern="[2-9][0-9]" /></condition>
     105        <condition property="isJava21"><matches string="${ant.java.version}" pattern="2[1-9]|[3-9][0-9]" /></condition>
    103106        <!-- Disable jacoco on Java 18+, see https://github.com/jacoco/jacoco/pull/1132 -->
    104107        <condition property="coverageByDefault">
     
    183186                <attribute name="Add-Exports" value="java.base/sun.security.action java.desktop/com.apple.eawt java.desktop/com.sun.imageio.spi java.desktop/com.sun.imageio.plugins.jpeg javafx.graphics/com.sun.javafx.application jdk.deploy/com.sun.deploy.config" />
    184187                <attribute name="Add-Opens" value="java.base/java.lang java.base/java.nio java.base/jdk.internal.loader java.base/jdk.internal.ref java.desktop/javax.imageio.spi java.desktop/javax.swing.text.html java.prefs/java.util.prefs" />
     188                <!-- Indicate that this jar may have version specific classes. Only used in Java9+. -->
     189                <attribute name="Multi-Release" value="true"/>
    185190            </manifest>
    186191        </jar>
     
    203208        </java>
    204209    </target>
     210    <macrodef name="call-javac-compile">
     211        <attribute name="sourcepath" default=""/>
     212        <attribute name="srcdir" default="${src.dir}"/>
     213        <attribute name="fork" default="yes"/>
     214        <attribute name="excludes" default=""/>
     215        <attribute name="includes" default="**/*.java"/>
     216        <attribute name="destdir" default="${build.dir}"/>
     217        <attribute name="debug" default="on"/>
     218        <attribute name="includeantruntime" default="false"/>
     219        <attribute name="encoding" default="UTF-8"/>
     220        <attribute name="release" default="${java.lang.version}"/>
     221        <element name="cp-elements" optional="true"/>
     222        <sequential>
     223          <javac sourcepath="@{sourcepath}" srcdir="@{srcdir}" fork="@{fork}"
     224            includes="@{includes}" excludes="@{excludes}" destdir="@{destdir}" release="@{release}"
     225            debug="@{debug}" includeantruntime="@{includeantruntime}" encoding="@{encoding}">
     226              <compilerarg value="-J-Xbootclasspath/p:${toString:errorprone_javac.classpath}" unless:set="isJava9"/>
     227              <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED" if:set="isJava16" unless:set="noErrorProne"/>
     228              <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED" if:set="isJava16" unless:set="noErrorProne"/>
     229              <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED" if:set="isJava16" unless:set="noErrorProne"/>
     230              <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED" if:set="isJava16" unless:set="noErrorProne"/>
     231              <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED" if:set="isJava16" unless:set="noErrorProne"/>
     232              <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED" if:set="isJava16" unless:set="noErrorProne"/>
     233              <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED" if:set="isJava16" unless:set="noErrorProne"/>
     234              <compilerarg value="-J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED" if:set="isJava16" unless:set="noErrorProne"/>
     235              <compilerarg value="-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED" if:set="isJava16" unless:set="noErrorProne"/>
     236              <compilerarg line="-XDcompilePolicy=simple"/>
     237              <compilerarg value="-processorpath"/>
     238              <compilerarg value="${toString:errorprone.classpath}:${toString:semanticdb.classpath}"/>
     239              <compilerarg value="-Xlint:cast"/>
     240              <compilerarg value="-Xlint:deprecation"/>
     241              <compilerarg value="-Xlint:dep-ann"/>
     242              <compilerarg value="-Xlint:divzero"/>
     243              <compilerarg value="-Xlint:empty"/>
     244              <compilerarg value="-Xlint:finally"/>
     245              <compilerarg value="-Xlint:overrides"/>
     246              <!--<compilerarg value="-Xlint:rawtypes"/>-->
     247              <compilerarg value="-Xlint:static"/>
     248              <compilerarg value="-Xlint:try"/>
     249              <compilerarg value="-Xlint:unchecked"/>
     250              <!-- Undocumented argument to ignore "Sun internal proprietary API" warning, see http://stackoverflow.com/a/13862308/2257172 -->
     251              <compilerarg value="-XDignore.symbol.file"/>
     252              <compilerarg value="-Xplugin:ErrorProne -XepExcludedPaths:.*/parsergen/.* -Xep:ReferenceEquality:OFF -Xep:FutureReturnValueIgnored:OFF -Xep:JdkObsolete:OFF -Xep:EqualsGetClass:OFF -Xep:UndefinedEquals:OFF -Xep:BadImport:OFF -Xep:AnnotateFormatMethod:OFF -Xep:JavaUtilDate:OFF -Xep:DoNotCallSuggester:OFF -Xep:BanSerializableRead:OFF -Xep:RestrictedApiChecker:OFF -Xep:InlineMeSuggester:OFF" unless:set="noErrorProne"/>
     253              <compilerarg line="-Xmaxwarns 1000"/>
     254              <compilerarg value="-Xplugin:semanticdb -sourceroot:@{srcdir} -targetroot:${build.dir}/semanticdb" if:set="lsif" />
     255              <classpath>
     256                  <path refid="runtime.path"/>
     257                  <cp-elements/>
     258              </classpath>
     259          </javac>
     260      </sequential>
     261    </macrodef>
     262    <macrodef name="call-javac-compile-mrjar">
     263      <!--
     264        See https://openjdk.java.net/jeps/238 for the specification
     265        The big bits are that the version specific files should be in META-INF/versions/${javaVersion}/
     266        using the same package scheme. And that the files in the version specific directories are *full*
     267        implementations of the class they are replacing.
     268      -->
     269      <attribute name="release"/>
     270      <sequential>
     271        <condition property="java@{release}DirExists">
     272          <and>
     273            <isset property="isJava@{release}"/>
     274            <resourceexists>
     275              <file file="${src.dir}/main/java-@{release}"/>
     276            </resourceexists>
     277          </and>
     278        </condition>
     279        <echo message="Compiling Java @{release} files" if:true="${java@{release}DirExists}"/>
     280        <mkdir dir="${build.dir}/META-INF/versions/@{release}" if:true="${java@{release}DirExists}"/>
     281        <call-javac-compile srcdir="${src.dir}/main/java-@{release}" destdir="${build.dir}/META-INF/versions/@{release}" release="@{release}" if:true="${java@{release}DirExists}">
     282            <cp-elements>
     283              <pathelement path="${build.dir}"/>
     284            </cp-elements>
     285        </call-javac-compile>
     286      </sequential>
     287    </macrodef>
    205288    <target name="compile" depends="init,javacc" unless="compile.notRequired" description="Compile JOSM">
    206289        <ivy:cachepath log="download-only" file="${tools.ivy}" pathid="errorprone.classpath" conf="errorprone"/>
    207290        <ivy:cachepath log="download-only" file="${tools.ivy}" pathid="errorprone_javac.classpath" conf="errorprone_javac"/>
    208291        <!-- JOSM -->
     292        <call-javac-compile excludes="**/package-info.java,**/module-info.java,main/**" release="${java.lang.version}"/>
     293        <!-- Java 11 specific files (2018-09 LTS) -->
     294        <call-javac-compile-mrjar release="11"/>
     295        <!-- Java 17 specific files (2021-09 LTS) -->
     296        <call-javac-compile-mrjar release="17"/>
     297        <!-- Java 18 specific files -->
     298        <call-javac-compile-mrjar release="18"/>
     299        <!-- Java 19 specific files -->
     300        <call-javac-compile-mrjar release="19"/>
     301        <!-- Java 20 specific files -->
     302        <call-javac-compile-mrjar release="20"/>
     303        <!-- Java 21 specific files (2023-09 LTS) -->
     304        <call-javac-compile-mrjar release="21"/>
    209305        <javac sourcepath="" srcdir="${src.dir}" fork="yes"
    210306            excludes="com/**,org/apache/commons/**,**/package-info.java"
Note: See TracChangeset for help on using the changeset viewer.