This is an automated email from the git hooks/post-receive script. ebourg-guest pushed a commit to branch master in repository openhft-affinity.
commit 8c79379e0b33781ebb4e7c52114ac4ef5457aa58 Author: Emmanuel Bourg <[email protected]> Date: Fri Mar 9 13:04:03 2018 +0100 Fixed the build failure with Java 9 (Closes: #875332) --- debian/changelog | 7 ++ debian/patches/01-java9-compatibility.patch | 150 ++++++++++++++++++++++++++++ debian/patches/series | 1 + 3 files changed, 158 insertions(+) diff --git a/debian/changelog b/debian/changelog index a899902..9121840 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +openhft-affinity (2.2-2) UNRELEASED; urgency=medium + + * Team upload. + * Fixed the build failure with Java 9 (Closes: #875332) + + -- Emmanuel Bourg <[email protected]> Fri, 09 Mar 2018 13:03:04 +0100 + openhft-affinity (2.2-1) unstable; urgency=medium * Initial release (Closes: #825969) diff --git a/debian/patches/01-java9-compatibility.patch b/debian/patches/01-java9-compatibility.patch new file mode 100644 index 0000000..fd9ceeb --- /dev/null +++ b/debian/patches/01-java9-compatibility.patch @@ -0,0 +1,150 @@ +Description: Fixes a build failure with Java 9 caused by the removal of sun.misc.URLClassPath. + This patch can be removed after upgrading to the version 3.1.1 or later. +Origin: backport, https://github.com/OpenHFT/Java-Thread-Affinity/commit/da19214 +Bug-Debian: https://bugs.debian.org/875332 +--- a/affinity/src/main/java/net/openhft/affinity/BootClassPath.java ++++ b/affinity/src/main/java/net/openhft/affinity/BootClassPath.java +@@ -1,60 +1,115 @@ + /* +- * Copyright 2014 Higher Frequency Trading ++ * Copyright 2016 higherfrequencytrading.com + * +- * http://www.higherfrequencytrading.com +- * +- * Licensed under the Apache License, Version 2.0 (the "License"); +- * you may not use this file except in compliance with the License. ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * +- * http://www.apache.org/licenses/LICENSE-2.0 ++ * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. ++ * + */ + + package net.openhft.affinity; + + import org.slf4j.Logger; + import org.slf4j.LoggerFactory; +-import sun.misc.URLClassPath; + +-import java.io.File; +-import java.net.MalformedURLException; +-import java.net.URL; ++import java.io.IOException; ++import java.nio.file.FileVisitResult; ++import java.nio.file.Files; ++import java.nio.file.Path; ++import java.nio.file.Paths; ++import java.nio.file.SimpleFileVisitor; ++import java.nio.file.attribute.BasicFileAttributes; ++import java.util.Collections; ++import java.util.Enumeration; ++import java.util.HashSet; ++import java.util.Set; ++import java.util.jar.JarEntry; ++import java.util.jar.JarFile; + + enum BootClassPath { + INSTANCE; + +- private final URLClassPath bootClassPath = new URLClassPath(getBootClassPathURLs()); ++ private final Set<String> bootClassPathResources = Collections.unmodifiableSet(getResourcesOnBootClasspath()); + + public final boolean has(String binaryClassName) { +- String resourceClassName = binaryClassName.replace('.', '/').concat(".class"); +- return bootClassPath.getResource(resourceClassName, false) != null; ++ final String resourceClassName = binaryClassName.replace('.', '/').concat(".class"); ++ return bootClassPathResources.contains(resourceClassName); + } + +- private URL[] getBootClassPathURLs() { +- Logger LOGGER = LoggerFactory.getLogger(BootClassPath.class); +- try { +- String bootClassPath = System.getProperty("sun.boot.class.path"); +- LOGGER.trace("Boot class-path is: {}",bootClassPath); ++ private static Set<String> getResourcesOnBootClasspath() { ++ final Logger logger = LoggerFactory.getLogger(BootClassPath.class); ++ final Set<String> resources = new HashSet<>(); ++ final String bootClassPath = System.getProperty("sun.boot.class.path"); ++ logger.trace("Boot class-path is: {}", bootClassPath); ++ ++ final String pathSeparator = System.getProperty("path.separator"); ++ logger.trace("Path separator is: '{}'", pathSeparator); ++ ++ final String[] pathElements = bootClassPath.split(pathSeparator); ++ ++ for (final String pathElement : pathElements) { ++ resources.addAll(findResources(Paths.get(pathElement), logger)); ++ } ++ ++ return resources; ++ } ++ ++ private static Set<String> findResources(final Path path, final Logger logger) { ++ if (!Files.exists(path)) { ++ return Collections.emptySet(); ++ } + +- String pathSeparator = System.getProperty("path.separator"); +- LOGGER.trace("Path separator is: '{}'", pathSeparator); ++ if (Files.isDirectory(path)) { ++ return findResourcesInDirectory(path, logger); ++ } ++ ++ return findResourcesInJar(path, logger); ++ } + +- String[] pathElements = bootClassPath.split(pathSeparator); +- URL[] pathURLs = new URL[pathElements.length]; +- for (int i = 0; i < pathElements.length; i++) { +- pathURLs[i] = new File(pathElements[i]).toURI().toURL(); ++ private static Set<String> findResourcesInJar(final Path path, final Logger logger) { ++ final Set<String> jarResources = new HashSet<>(); ++ try { ++ final JarFile jarFile = new JarFile(path.toFile()); ++ final Enumeration<JarEntry> entries = jarFile.entries(); ++ while (entries.hasMoreElements()) { ++ final JarEntry jarEntry = entries.nextElement(); ++ if (jarEntry.getName().endsWith(".class")) { ++ jarResources.add(jarEntry.getName()); ++ } + } + +- return pathURLs; +- } catch (MalformedURLException e) { +- LOGGER.warn("Parsing the boot class-path failed! Reason: {}", e.getMessage()); +- return new URL[0]; ++ ++ } catch (IOException e) { ++ logger.warn("Not a jar file: {}", path); + } ++ ++ return jarResources; ++ } ++ ++ private static Set<String> findResourcesInDirectory(final Path path, final Logger logger) { ++ final Set<String> dirResources = new HashSet<>(); ++ try { ++ Files.walkFileTree(path, new SimpleFileVisitor<Path>() { ++ @Override ++ public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) throws IOException { ++ if (file.getFileName().toString().endsWith(".class")) { ++ dirResources.add(path.relativize(file).toString()); ++ } ++ return super.visitFile(file, attrs); ++ } ++ }); ++ } catch (IOException e) { ++ logger.warn("Error walking dir: " + path, e); ++ } ++ ++ return dirResources; + } + } diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 0000000..12bc5e0 --- /dev/null +++ b/debian/patches/series @@ -0,0 +1 @@ +01-java9-compatibility.patch -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/openhft-affinity.git _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

