From 21e2b0d69dba56450a82ccf00a4c182f1a085041 Mon Sep 17 00:00:00 2001 From: Ingo Bauersachs Date: Sun, 23 Jan 2022 20:55:02 +0100 Subject: [PATCH] Add full JPMS support --- .github/workflows/build.yml | 22 +-- checkstyle/checkstyle-config.xml | 4 + pom.xml | 146 +++++++----------- src/main/java/android/content/Context.java | 8 + .../java/android/net/ConnectivityManager.java | 12 ++ src/main/java/android/net/LinkProperties.java | 15 ++ src/main/java/android/net/Network.java | 4 + src/main/java/module-info.java | 16 ++ .../org/xbill/DNS/spi/DNSJavaNameService.java | 29 ++-- .../sun/net/spi/nameservice/NameService.java | 11 ++ .../nameservice/NameServiceDescriptor.java | 10 ++ 11 files changed, 159 insertions(+), 118 deletions(-) create mode 100644 src/main/java/android/content/Context.java create mode 100644 src/main/java/android/net/ConnectivityManager.java create mode 100644 src/main/java/android/net/LinkProperties.java create mode 100644 src/main/java/android/net/Network.java create mode 100644 src/main/java/module-info.java create mode 100644 src/main/java/sun/net/spi/nameservice/NameService.java create mode 100644 src/main/java/sun/net/spi/nameservice/NameServiceDescriptor.java diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2d42dd8bd..0708457ca 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,13 +17,11 @@ jobs: strategy: fail-fast: false matrix: - os: [ ubuntu-18.04, ubuntu-20.04, windows-latest ] + os: [ ubuntu-latest, windows-latest ] java: [ '8', '11', '17' ] arch: [ 'x86', 'x64' ] exclude: - - os: ubuntu-18.04 - arch: x86 - - os: ubuntu-20.04 + - os: ubuntu-latest arch: x86 name: Java ${{ matrix.java }}/${{ matrix.arch }}/${{ matrix.os }} @@ -44,12 +42,12 @@ jobs: cache: maven - name: Build with Maven - if: "${{ !(matrix.arch == 'x64' && matrix.os == 'ubuntu-20.04' && matrix.java == '11') || github.event.pull_request.head.repo.full_name != 'dnsjava/dnsjava' }}" + if: "${{ !(matrix.arch == 'x64' && matrix.os == 'ubuntu-latest' && matrix.java == '17') || github.event.pull_request.head.repo.full_name != 'dnsjava/dnsjava' }}" run: mvn verify -B -"Dgpg.skip" # doesn't work with PRs from forks, see https://jira.sonarsource.com/browse/MMF-1371 - name: Cache Sonar plugins - if: "${{ (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/release/') || github.event.pull_request.head.repo.full_name == 'dnsjava/dnsjava') && matrix.arch == 'x64' && matrix.os == 'ubuntu-20.04' && matrix.java == '11' }}" + if: "${{ (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/release/') || github.event.pull_request.head.repo.full_name == 'dnsjava/dnsjava') && matrix.arch == 'x64' && matrix.os == 'ubuntu-latest' && matrix.java == '17' }}" uses: actions/cache@v2 with: path: ~/.sonar/cache @@ -58,27 +56,29 @@ jobs: ${{ runner.os }}-sonar - name: Build with Maven and run Sonar - if: "${{ (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/release/') || github.event.pull_request.head.repo.full_name == 'dnsjava/dnsjava') && matrix.arch == 'x64' && matrix.os == 'ubuntu-20.04' && matrix.java == '11' }}" + if: "${{ (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/release/') || github.event.pull_request.head.repo.full_name == 'dnsjava/dnsjava') && matrix.arch == 'x64' && matrix.os == 'ubuntu-latest' && matrix.java == '17' }}" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} run: mvn -B -"Dgpg.skip" verify jacoco:report org.sonarsource.scanner.maven:sonar-maven-plugin:sonar - name: Run codecovc - if: "${{ matrix.arch == 'x64' && matrix.os == 'ubuntu-20.04' && matrix.java == '11' }}" + if: "${{ matrix.arch == 'x64' && matrix.java == '17' }}" uses: codecov/codecov-action@v2 + with: + flags: ${{matrix.os}},${{ matrix.java }} release: if: github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/release/') needs: test - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: Set up JDK 8 + - name: Set up JDK 17 uses: actions/setup-java@v2 with: - java-version: '8' + java-version: '17' architecture: 'x64' distribution: temurin cache: maven diff --git a/checkstyle/checkstyle-config.xml b/checkstyle/checkstyle-config.xml index 0d6704580..2b91d226d 100644 --- a/checkstyle/checkstyle-config.xml +++ b/checkstyle/checkstyle-config.xml @@ -9,4 +9,8 @@ + + + + diff --git a/pom.xml b/pom.xml index c38233ac4..4cfe2edf7 100644 --- a/pom.xml +++ b/pom.xml @@ -45,15 +45,16 @@ UTF-8 + 17 8 5.8.2 - 4.1.0 - 1.7.32 + 4.2.0 + 1.7.33 1.18.22 5.9.0 1.69 - 4.2.1 + 4.2.2 dnsjava_dnsjava dnsjava @@ -89,9 +90,10 @@ org.apache.maven.plugins maven-compiler-plugin - 3.8.1 + 3.9.0 - -Xlint:unchecked + ${build.jdk} + -Xlint:all org.projectlombok @@ -100,6 +102,32 @@ + + + + default-compile + + ${build.jdk} + + module-info.java + + + + + + + base-compile + + compile + + + ${target.jdk} + + module-info.java + + + + @@ -111,31 +139,38 @@ org.apache.felix maven-bundle-plugin - 5.1.2 + 5.1.4 true + true + lombok dnsjava is an implementation of DNS in Java org.xbill.dns - org.dnsjava + https://javadoc.io/doc/dnsjava/dnsjava <_noclassforname>true + <_donotcopy>android|sun + <_nouses>true + !org.xbill.DNS.spi, org.xbill.DNS.* + !android.*,!sun.*,. !org.xbill.DNS*, !sun.*, !lombok, - android.*;resolution:=optional, + android.content;resolution:=optional, + android.net;resolution:=optional, javax.naming.*;resolution:=optional, - com.sun.jna.*;resolution:=optional, + com.sun.jna.*;resolution:=optional;version="[5,6)", * - JavaSE-1.8 BSD-3-Clause;link="https://raw.githubusercontent.com/dnsjava/dnsjava/master/LICENSE" - <_removeheaders>Bnd-*, Tool, Require-Capability, Include-Resource + <_removeheaders>Bnd-*, Tool, Require-Capability, Include-Resource, Private-Package + <_snapshot>SNAPSHOT {maven-resources}, META-INF/LICENSE=LICENSE @@ -161,7 +196,7 @@ org.apache.maven.plugins maven-surefire-plugin - 2.22.2 + 3.0.0-M5 @@ -171,6 +206,10 @@ + + ${argLine} --add-opens java.base/sun.net.dns=ALL-UNNAMED + + false @@ -212,6 +251,9 @@ true true + + android + sun org.xbill.DNS.spi @@ -255,6 +297,7 @@ com.coveo fmt-maven-plugin + 2.9.1 @@ -292,7 +335,7 @@ com.puppycrawl.tools checkstyle - 9.2 + 9.2.1 @@ -368,12 +411,6 @@ ${lombok.version} provided - - org.robolectric - android-all - 12-robolectric-7732740 - provided - net.java.dev.jna jna @@ -442,77 +479,6 @@ - - - java8 - - [,9) - - - - - org.apache.maven.plugins - maven-compiler-plugin - - ${target.jdk} - ${target.jdk} - - - - - - - - - no-spi-on-java9 - - [9,) - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - ${target.jdk} - - org/xbill/DNS/spi/** - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - - *.spi - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - ${argLine} --add-opens java.base/sun.net.dns=ALL-UNNAMED - - - - - - - - src/main/resources - - META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor - - - - - - - ossrh diff --git a/src/main/java/android/content/Context.java b/src/main/java/android/content/Context.java new file mode 100644 index 000000000..45628bc73 --- /dev/null +++ b/src/main/java/android/content/Context.java @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: BSD-3-Clause +package android.content; + +public class Context { + public T getSystemService(Class serviceClass) { + throw new UnsupportedOperationException(); + } +} diff --git a/src/main/java/android/net/ConnectivityManager.java b/src/main/java/android/net/ConnectivityManager.java new file mode 100644 index 000000000..2c3c44d3e --- /dev/null +++ b/src/main/java/android/net/ConnectivityManager.java @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: BSD-3-Clause +package android.net; + +public class ConnectivityManager { + public Network getActiveNetwork() { + throw new UnsupportedOperationException(); + } + + public LinkProperties getLinkProperties(Network network) { + throw new UnsupportedOperationException(); + } +} diff --git a/src/main/java/android/net/LinkProperties.java b/src/main/java/android/net/LinkProperties.java new file mode 100644 index 000000000..ad264e794 --- /dev/null +++ b/src/main/java/android/net/LinkProperties.java @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: BSD-3-Clause +package android.net; + +import java.net.InetAddress; +import java.util.List; + +public class LinkProperties { + public List getDnsServers() { + throw new UnsupportedOperationException(); + } + + public String getDomains() { + throw new UnsupportedOperationException(); + } +} diff --git a/src/main/java/android/net/Network.java b/src/main/java/android/net/Network.java new file mode 100644 index 000000000..da9ef5d32 --- /dev/null +++ b/src/main/java/android/net/Network.java @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: BSD-3-Clause +package android.net; + +public class Network {} diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java new file mode 100644 index 000000000..7c4ba6d8e --- /dev/null +++ b/src/main/java/module-info.java @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: BSD-3-Clause +module org.dnsjava { + requires static lombok; + requires static java.naming; + requires static com.sun.jna; + requires static com.sun.jna.platform; + requires org.slf4j; + + exports org.xbill.DNS; + exports org.xbill.DNS.config; + exports org.xbill.DNS.dnssec; + exports org.xbill.DNS.hosts; + exports org.xbill.DNS.lookup; + exports org.xbill.DNS.tools; + exports org.xbill.DNS.utils; +} diff --git a/src/main/java/org/xbill/DNS/spi/DNSJavaNameService.java b/src/main/java/org/xbill/DNS/spi/DNSJavaNameService.java index 610a963ae..49e41fa4b 100644 --- a/src/main/java/org/xbill/DNS/spi/DNSJavaNameService.java +++ b/src/main/java/org/xbill/DNS/spi/DNSJavaNameService.java @@ -27,20 +27,19 @@ * *

This Name Service Provider uses dnsjava. * - *

To use this provider, you must set the following system property: - * sun.net.spi.nameservice.provider.1=dns,dnsjava + *

To use this provider, you must set the following system property: {@code + * sun.net.spi.nameservice.provider.1=dns,dnsjava} * * @author Brian Wellington * @author Paul Cowan (pwc21@yahoo.com) */ @Slf4j public class DNSJavaNameService implements NameService { + private static final String NAMESERVERS_PROPERTY = "sun.net.spi.nameservice.nameservers"; + private static final String DOMAIN_PROPERTY = "sun.net.spi.nameservice.domain"; + private static final String PREFER_V6_PROPERTY = "java.net.preferIPv6Addresses"; - private static final String nsProperty = "sun.net.spi.nameservice.nameservers"; - private static final String domainProperty = "sun.net.spi.nameservice.domain"; - private static final String v6Property = "java.net.preferIPv6Addresses"; - - private boolean preferV6 = false; + private final boolean preferV6; private Name localhostName = null; private InetAddress[] localhostNamedAddresses = null; @@ -54,9 +53,9 @@ public class DNSJavaNameService implements NameService { * and java.net.preferIPv6Addresses properties for configuration. */ protected DNSJavaNameService() { - String nameServers = System.getProperty(nsProperty); - String domain = System.getProperty(domainProperty); - String v6 = System.getProperty(v6Property); + preferV6 = Boolean.getBoolean(PREFER_V6_PROPERTY); + String nameServers = System.getProperty(NAMESERVERS_PROPERTY); + String domain = System.getProperty(DOMAIN_PROPERTY); if (nameServers != null) { StringTokenizer st = new StringTokenizer(nameServers, ","); @@ -69,22 +68,18 @@ protected DNSJavaNameService() { Resolver res = new ExtendedResolver(servers); Lookup.setDefaultResolver(res); } catch (UnknownHostException e) { - log.error("DNSJavaNameService: invalid {}", nsProperty); + log.error("DNSJavaNameService: invalid {}", NAMESERVERS_PROPERTY); } } if (domain != null) { try { - Lookup.setDefaultSearchPath(new String[] {domain}); + Lookup.setDefaultSearchPath(domain); } catch (TextParseException e) { - log.error("DNSJavaNameService: invalid {}", domainProperty); + log.error("DNSJavaNameService: invalid {}", DOMAIN_PROPERTY); } } - if (v6 != null && v6.equalsIgnoreCase("true")) { - preferV6 = true; - } - try { // retrieve the name from the system that is used as localhost Class inetAddressImplFactoryClass = Class.forName("java.net.InetAddressImplFactory"); diff --git a/src/main/java/sun/net/spi/nameservice/NameService.java b/src/main/java/sun/net/spi/nameservice/NameService.java new file mode 100644 index 000000000..4ddbf079d --- /dev/null +++ b/src/main/java/sun/net/spi/nameservice/NameService.java @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: BSD-3-Clause +package sun.net.spi.nameservice; + +import java.net.InetAddress; +import java.net.UnknownHostException; + +public interface NameService { + InetAddress[] lookupAllHostAddr(String var1) throws UnknownHostException; + + String getHostByAddr(byte[] var1) throws UnknownHostException; +} diff --git a/src/main/java/sun/net/spi/nameservice/NameServiceDescriptor.java b/src/main/java/sun/net/spi/nameservice/NameServiceDescriptor.java new file mode 100644 index 000000000..090f77f1e --- /dev/null +++ b/src/main/java/sun/net/spi/nameservice/NameServiceDescriptor.java @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: BSD-3-Clause +package sun.net.spi.nameservice; + +public interface NameServiceDescriptor { + NameService createNameService() throws Exception; + + String getProviderName(); + + String getType(); +}