Hi, Given the issues we are seeing, and I suspect this is not the only code with these assumptions, is there any way this functionality can be limited to "multi-release aware" code, either via a constructor parameter or a new method? What is the most elegant approach?
Andre > On 5 Mar, 2016, at 08:50, Claes Redestad <claes.redes...@oracle.com> wrote: > > Hi, > > similar issues were discovered too late to stop b108, e.g., > https://bugs.openjdk.java.net/browse/JDK-8150920. Fix is already in jdk9/dev, > so I think the next build should be more well-behaved and hope we can provide > it more promptly than normal. > > If you can build OpenJDK from jdk9/dev and report any remaining issues due to > the multi-release feature that would be quite helpful! > > Thanks! > > /Claes > > Uwe Schindler <uschind...@apache.org> skrev: (5 mars 2016 14:24:37 CET) >> Hi OpenJDK Core Developers, >> >> you may know the Apache Lucene team is testing early access releases of >> Java 9. We reported many bugs already, but most of them only applied to >> Hotspot and Lucene itsself. But this problem since build 108 is now >> really severe, because it breaks the build system already! >> >> To allow further testing of Open Source Projects, I'd suggest to revert >> the Multi-Release-JAR runtime support patch and provide a new preview >> build ASAP, because we found out after a night of debugging a build >> system from which we don't know all internals what is causing the >> problems and there is no workaround. I am very sorry that I have to say >> this, but it unfortunately build 108 breaks *ALL* versions of Apache >> Ant, the grandfather of all Java build systems :-) I know also OpenJDK >> is using it, too! So with Multi-Release JAR file patch applied (see >> http://hg.openjdk.java.net/jdk9/jdk9/jdk/rev/f9913ea0f95c), any >> Ant-based build - including the JDK build itsself - would no longer >> bootstrap. It is impossible to also build Gradle projects, because >> Gradle uses Ant internally for many tasks). Maven projects may be >> affected, too. >> >> Now you might have the question: What happened? >> >> We tried to build Lucene on our Jenkins server, but the build itsself >> failed with a stupid error message: >> >> BUILD FAILED >> /home/jenkins/workspace/Lucene-Solr-master-Linux/build.xml:21: The >> following error occurred while executing this line: >> /home/jenkins/workspace/Lucene-Solr-master-Linux/lucene/common-build.xml:56: >> not doesn't support the nested "matches" element. >> >> The first idea was: Ah, there were changes in XML parsing >> (JDK-8149915). So we debugged the build. But it was quite clear that >> XML parsing was not the issue. It got quite clear when we enabled >> "-debug" on the build. What happened was that Ant was not loading its >> internal conditions/tasks/type definitions anymore, so the build system >> does not know almost any type anymore. The debug log showed that Ant >> was no longer able to load the resource >> "/org/apache/tools/ant/antlib.xml" from its own JAR file anymore. >> Instead it printed some strange debugging output (which looked totally >> broken). >> >> I spend the whole night digging through their code and found the issue: >> The commit of Multi-Release-Jar files (see >> http://hg.openjdk.java.net/jdk9/jdk9/jdk/rev/f9913ea0f95c) broke >> resource handling in Apache Ant. In short: If you call >> ClassLoader.getResources() / or getResource() you get back an URL from >> where you can load the Resource - this is all fine and still works. >> But, with the Multi-Release JAR files patch this now has an URL >> fragment appended to the URL: '#release' (see >> http://hg.openjdk.java.net/jdk9/jdk9/jdk/rev/f9913ea0f95c); this also >> applies to non-multi-release JAR files like Apache Ant's "ant.jar". >> >> In Java 7, Java 8,... and Java 9pre-b108, >> ClassLoader.getResource()/getResources() returned stuff like: >> >> "jar:file:/C:/Program%20Files/Java/apache-ant-1.9.6/lib/ant.jar!/org/apache/tools/ant/antlib.xml" >> >> Now in Java 9b108 the following is returned: >> >> "jar:file:/C:/Program%20Files/Java/apache-ant-1.9.6/lib/ant.jar!/org/apache/tools/ant/antlib.xml#release" >> >> And here Ant breaks (and I assume many other projects like Maven, too). >> Ant checks for the file extension of the string (because it may load >> definitions from both XML and properties files). So it does >> endsWith(".xml") and of course this now returns false. The effect is >> that Ant tries to load its own task definitions as a java properties >> file instead of XML. Of course this fails, because the data behind this >> URL is XML. The effect is that Ant cannot bootstrap as everything to >> build is missing. >> >> One might say: Ant's code is broken (I agree, it is not nice because it >> relies on the string representation of the resource URL - which is a >> no-go anyways), but it is impossible to fix, because Ant is bundled on >> most developer computers and those will suddenly break with Java 9! >> There is also no version out there that works around this, so we cannot >> test anything anymore! >> >> The problematic line in Ant's code is here: >> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.ant/ant/1.9.6/org/apache/tools/ant/taskdefs/Definer.java?av=f#259 >> >> I'd suggest to please ASAP revert the Multi-Release JAR file patch and >> provide a new preview build as soon as possible. I think there is more >> work needed to fix this. If this does not revert to the original state, >> it will be impossible to build and test Lucene, Elasticsearch,.... (and >> almost every Java project out there!). So short: We cannot test anymore >> and it is likely that we cannot support Java 9 anymore because the >> build system used by most Java projects behind the scenes does not >> bootstrap itself anymore. >> >> My suggestion would be to investigate other versions for this patch >> that does *not* modify the resource URLs by appending a fragment to >> them (at least not for the "standard" case without an actual >> Multi-Release Jar). For new multi-release JAR files I am fine with >> appending fragments, but please not for default ones. Maybe change code >> to handle the URLs from the non-versioned part differently (without >> fragment). Leaving the fragment inide may break many othe rprojects, >> because many programmers are very sloppy with handling URLs (well-known >> issue is calling URL#getFile() of a file:-URL that breaks on Windows >> systems and spaces in path name). Many people just call toString() on >> URL and do some test on it (startsWith, endsWith). So appending >> fragments is a no-go for backwards compatibility with JAR resources! >> >> I posted this to the mailing list and did not open a bug report on >> http://bugs.java.com/, because this is a more general issue - feel free >> to open bug reports around this!!! I would be very happy if we could >> find a quick solution for this problem. Until there is a solution we >> have to stop testing Java 9 with Apache Lucene/Solr/..., and this is >> not a good sign, especially as Jigsaw will be merged soon. >> >> Thanks for listening, >> Uwe >> >> P.S.: I also CCed the Apache Ant team. They should fix the broken code >> anyways, but this won't help for many projects already out there (e.g. >> Apache Lucene still has a minimum requirement of Ant 1.8.2 because >> MacOSX computers ship with that version since years). >> >> ----- >> Uwe Schindler >> uschind...@apache.org >> ASF Member, Apache Lucene PMC / Committer >> Bremen, Germany >> http://lucene.apache.org/ > > -- > Sent from my Android device with K-9 Mail. Please excuse my brevity.