diff --git a/.github/workflows/create.yml b/.github/workflows/create.yml
index d78194ef..3cbfc4e5 100644
--- a/.github/workflows/create.yml
+++ b/.github/workflows/create.yml
@@ -152,6 +152,7 @@ jobs:
with:
java-version: '17'
distribution: 'temurin'
+ java-package: 'jre'
architecture: ${{ matrix.architecture }}
- name: Setup ant on macOS
diff --git a/.github/workflows/test-wheels.yml b/.github/workflows/test-wheels.yml
new file mode 100644
index 00000000..f648dd48
--- /dev/null
+++ b/.github/workflows/test-wheels.yml
@@ -0,0 +1,201 @@
+on:
+ push:
+ pull_request:
+ create:
+
+name: Continuous Integration - Testing Wheels on JREs
+jobs:
+ build_test_jar:
+ runs-on: 'ubuntu-latest'
+ steps:
+
+ - name: Checkout pyjnius
+ uses: actions/checkout@v3
+
+ - name: Setup java
+ # There's no need to setup java on ubuntu-latest, as build is done into a manylinux
+ # containerized environment. (CIBW_BEFORE_ALL_LINUX) takes care of it.
+ uses: actions/setup-java@v3
+ with:
+ java-version: '17'
+ distribution: 'temurin'
+ architecture: 'x64'
+
+ - name: Setup ant on Linux
+ run: |
+ sudo apt-get update && sudo apt-get install -y ant
+
+ - name: Build test-classes via ant
+ run: ant all
+
+ - name: Upload test-classes
+ uses: actions/upload-artifact@v3
+ with:
+ name: test-classes
+ path: build/test-classes
+
+ build_wheels:
+ name: cibuildwheel on ${{ matrix.os }} ${{ matrix.architecture }}
+ env:
+ CIBW_BEFORE_ALL_LINUX: 'yum install -y java-11-openjdk-devel'
+ CIBW_REPAIR_WHEEL_COMMAND_MACOS: ''
+ CIBW_SKIP: 'cp36-* *musllinux*'
+ strategy:
+ matrix:
+ include:
+ - os: windows-latest
+ architecture: 'x86'
+ cibw_archs: 'x86'
+ - os: windows-latest
+ architecture: 'x64'
+ cibw_archs: 'AMD64'
+ - os: ubuntu-latest
+ architecture: 'x64'
+ cibw_archs: 'x86_64'
+ - os: macos-latest
+ architecture: 'x64'
+ cibw_archs: 'x86_64 universal2'
+ runs-on: ${{ matrix.os }}
+ steps:
+
+ - name: Checkout pyjnius
+ uses: actions/checkout@v3
+
+ - name: Setup Python (Ubuntu x86_64, macOS Intel, Windows x86_64)
+ if: matrix.os == 'macos-latest' || matrix.os == 'windows-latest' || matrix.os == 'ubuntu-latest'
+ uses: actions/setup-python@v4
+ with:
+ python-version: '3.x'
+
+ - name: Setup java
+ # There's no need to setup java on ubuntu-latest, as build is done into a manylinux
+ # containerized environment. (CIBW_BEFORE_ALL_LINUX) takes care of it.
+ if: ${{ matrix.os != 'ubuntu-latest' }}
+ uses: actions/setup-java@v3
+ with:
+ java-version: '17'
+ distribution: 'temurin'
+ architecture: ${{ matrix.architecture }}
+
+ - name: Install cibuildwheel & build wheels (Windows)
+ if: matrix.os == 'windows-latest'
+ env:
+ CIBW_ARCHS: '${{ matrix.cibw_archs }}'
+ run: |
+ python -m pip install cibuildwheel~=2.16.2
+ python -m cibuildwheel --output-dir dist
+
+ - name: Install cibuildwheel & build wheels (Linux, macOS Intel)
+ if: (matrix.os == 'ubuntu-latest') || (matrix.os == 'kivy-ubuntu-arm64') || (matrix.os == 'macos-latest')
+ env:
+ CIBW_ARCHS: '${{ matrix.cibw_archs }}'
+ run: |
+ source .ci/utils.sh
+ ensure_python_version 3.11
+ python -m pip install cibuildwheel~=2.16.2
+ python -m cibuildwheel --output-dir dist
+
+ - name: upload wheels
+ uses: actions/upload-artifact@v3
+ with:
+ name: dist
+ path: dist
+
+ test_wheels:
+ name: Test wheel on ${{ matrix.os }} (${{ matrix.architecture }}) Python ${{ matrix.python }}
+ needs:
+ - build_wheels
+ continue-on-error: true
+ strategy:
+ matrix:
+ os: ['ubuntu-latest', 'macos-latest', 'windows-latest', 'kivy-ubuntu-arm64']
+ python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12', 'pypy3.7', 'pypy3.8', 'pypy3.9']
+ include:
+ # We may would like to introduce tests also on windows-latest on x86 (win32 wheels)?
+ - os: ubuntu-latest
+ architecture: 'x64'
+ - os: windows-latest
+ architecture: 'x64'
+ - os: macos-latest
+ architecture: 'x64'
+ - os: apple-silicon-m1
+ architecture: 'aarch64'
+ python: '3.10'
+ - os: apple-silicon-m1
+ architecture: 'aarch64'
+ python: '3.11'
+ - os: apple-silicon-m1
+ architecture: 'aarch64'
+ python: '3.12'
+ runs-on: ${{ matrix.os }}
+ steps:
+
+ - name: Checkout pyjnius
+ uses: actions/checkout@v3
+
+ - uses: actions/download-artifact@v3
+ with:
+ name: dist
+ path: dist
+
+ - uses: actions/download-artifact@v3
+ with:
+ name: test-classes
+ path: build/test-classes
+
+ - name: Setup Python (Ubuntu x86_64, macOS Intel, Windows x86_64)
+ # Needs to be skipped on our self-hosted runners tagged as 'apple-silicon-m1'
+ if: matrix.os == 'macos-latest' || matrix.os == 'windows-latest' || matrix.os == 'ubuntu-latest' || matrix.os == 'apple-silicon-m1'
+ uses: actions/setup-python@v4
+ with:
+ python-version: ${{ matrix.python }}
+
+ - name: Setup java
+ uses: actions/setup-java@v3
+ with:
+ java-version: '17'
+ distribution: 'temurin'
+ java-package: 'jre'
+ architecture: ${{ matrix.architecture }}
+
+ - name: Install pyjnius wheel + test prerequisites (Windows, macOS)
+ if: matrix.os == 'windows-latest' || matrix.os == 'macos-latest' || matrix.os == 'apple-silicon-m1'
+ # --find-links=dist --no-index is needed to avoid downloading the pyjnius wheel
+ # from the index. We need to test the wheel we just built.
+ run: |
+ python -m pip install --find-links=dist --no-index pyjnius
+ python -m pip install pyjnius[dev,ci]
+
+ - name: Install pyjnius wheel + test prerequisites (Linux)
+ if: matrix.os == 'ubuntu-latest' || matrix.os == 'kivy-ubuntu-arm64'
+ # --find-links=dist --no-index is needed to avoid downloading the pyjnius wheel
+ # from the index. We need to test the wheel we just built.
+ run: |
+ source .ci/utils.sh
+ ensure_python_version ${{ matrix.python }}
+ python -m pip install --find-links=dist --no-index pyjnius
+ python -m pip install pyjnius[dev,ci]
+
+ - name: Test wheel (Linux, macOS)
+ if: (matrix.os == 'ubuntu-latest') || (matrix.os == 'kivy-ubuntu-arm64') || (matrix.os == 'macos-latest') || (matrix.os == 'apple-silicon-m1')
+ run: |
+ source .ci/utils.sh
+ ensure_python_version ${{ matrix.python }}
+ cd tests
+ CLASSPATH=../build/test-classes:../build/classes python -m pytest -v
+
+ - name: Test wheel ( Windows + Python == 3.7.x )
+ # On Python < 3.8.x, we can't use `os.add_dll_directory`, so the jre should be in PATH.
+ if: (matrix.os == 'windows-latest') && contains(matrix.python, '3.7')
+ run: |
+ cd tests
+ $env:PATH +=";$env:JAVA_HOME\jre\bin\server\;$env:JAVA_HOME\jre\bin\client\;$env:JAVA_HOME\bin\server\"
+ $env:CLASSPATH ="../build/test-classes;../build/classes"
+ python -m pytest -v
+
+ - name: Test wheel (Windows + Python != 3.7.x )
+ if: (matrix.os == 'windows-latest') && !contains(matrix.python, '3.7')
+ run: |
+ cd tests
+ $env:CLASSPATH ="../build/test-classes;../build/classes"
+ python -m pytest -v
\ No newline at end of file
diff --git a/docs/source/building.rst b/docs/source/building.rst
index 3aedf64e..7f33fbcc 100644
--- a/docs/source/building.rst
+++ b/docs/source/building.rst
@@ -6,9 +6,9 @@ Building PyJNIus
Building PyJNIus is necessary for development purposes, or if there is no
pre-built binary for your particular platform.
-Like installation of PyJNIus, building PyJNIus requires a `Java Development Kit
+Building PyJNIus requires a `Java Development Kit
`_ (JDK)
-to be installed.
+to be installed (NB: installing pre-built wheels required only a JRE).
Apart from the JDK, the build requirements for each platform are as follows:
diff --git a/docs/source/installation.rst b/docs/source/installation.rst
index 32f1dbdc..ebedac12 100644
--- a/docs/source/installation.rst
+++ b/docs/source/installation.rst
@@ -16,10 +16,11 @@ If there is no pre-compiled binary available, pip install will aim to compile
a binary on your operating system. For more information see the :ref:`building`
documentation.
-You will need the Java JDK installed (`OpenJDK `_ is fine).
+You will need the Java JRE installed (`OpenJDK `_ is fine).
PyJNIus searches for Java in the usual places on each operating system. If PyJNIus
cannot find Java, set the `JAVA_HOME` environment variable (this is often needed
`on Windows `_).
+NB: Building pyjnius requires a Java JDK rather than a JRE.
Installation for Android
------------------------