diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index b5d66d8eea5..103788892f4 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -31,9 +31,9 @@ // Install java. // See https://github.com/devcontainers/features/tree/main/src/java#options for details. "ghcr.io/devcontainers/features/java:1": { - "version": "24.0.2-amzn", + "version": "latest", "installGradle": true, - "gradleVersion": "8.14.3", + "gradleVersion": "latest", "jdkDistro": "Corretto" } } diff --git a/.github/workflows/binaries.yml b/.github/workflows/binaries.yml index d1eb456036d..c2785daef50 100644 --- a/.github/workflows/binaries.yml +++ b/.github/workflows/binaries.yml @@ -21,6 +21,12 @@ on: workflow_dispatch: inputs: notarization: + description: "Notarize macOS DMG and PKG?" + type: boolean + required: false + default: false + eaJdk: + description: "Use Early-Access JDK?" type: boolean required: false default: false @@ -53,6 +59,7 @@ jobs: # requried to avoid obsolete builds in case of labels != "dev: binaries" should-build: ${{ steps.binary.outputs.should-build }} should-notarize: ${{ steps.binary.outputs.should-notarize }} + eaJdk: ${{ steps.binary.outputs.eaJdk }} steps: - name: Determine conditions @@ -65,12 +72,6 @@ jobs: LABEL_NAME: ${{ github.event.label.name }} REPO_OWNER: ${{ github.repository_owner }} run: | - if [[ "$GITHUB_WORKFLOW" == *"early access"* && "$REPO_OWNER" != "JabRef" ]]; then - echo "🚫 Early access workflow for JabRef disabled for non-JabRef owner" - echo "should-build=false" >> "$GITHUB_OUTPUT" - exit 0 - fi - if [[ "$EVENT_NAME" != "labeled" || "$LABEL_NAME" == "automerge" || "$LABEL_NAME" == "dev: binaries" ]]; then echo "📦 build enabled" echo "should-build=true" >> "$GITHUB_OUTPUT" @@ -80,6 +81,16 @@ jobs: exit 0 fi + if [[ "${{ inputs.eaJdk }}" == "true" ]]; then + echo "🚀 JDK EA build enabled" + echo "🚀 JDK EA build enabled" >> "$GITHUB_STEP_SUMMARY" + echo "eaJdk=true" >> "$GITHUB_OUTPUT" + else + echo "🛡️ JDK stable version used" + echo "🛡️ JDK stable version used" >> "$GITHUB_STEP_SUMMARY" + echo "eaJdk=true" >> "$GITHUB_OUTPUT" + fi + if [ -z "$BUILDJABREFPRIVATEKEY" ]; then echo "upload-to-builds-jabref-org=false" >> "$GITHUB_OUTPUT" echo "secretspresent=false" >> "$GITHUB_OUTPUT" @@ -143,6 +154,8 @@ jobs: archivePortableJabLS: tar -c -C jabls-cli/build/packages/ubuntu-22.04 jabls | pigz --rsyncable > jabls-cli/build/packages/ubuntu-22.04/jabls-portable_linux.tar.gz && rm -R jabls-cli/build/packages/ubuntu-22.04/jabls suffix: '' archForDebianRepack: '_amd64' + # Browse at https://gluonhq.com/products/javafx/ for latest version + eaJdkJmodsUrl: https://download2.gluonhq.com/openjfx/26/openjfx-26-ea+14_linux-x64_bin-jmods.zip - os: ubuntu-22.04-arm displayName: linux-arm archivePortable: tar -c -C jabgui/build/packages/ubuntu-22.04-arm JabRef | pigz --rsyncable > jabgui/build/packages/ubuntu-22.04-arm/JabRef-portable_linux_arm64.tar.gz && rm -R jabgui/build/packages/ubuntu-22.04-arm/JabRef @@ -150,6 +163,7 @@ jobs: archivePortableJabLS: tar -c -C jabls-cli/build/packages/ubuntu-22.04-arm jabls | pigz --rsyncable > jabls-cli/build/packages/ubuntu-22.04-arm/jabls-portable_linux_arm64.tar.gz && rm -R jabls-cli/build/packages/ubuntu-22.04-arm/jabls suffix: '_arm64' archForDebianRepack: '_arm64' + eaJdkJmodsUrl: https://download2.gluonhq.com/openjfx/26/openjfx-26-ea+14_linux-aarch64_bin-jmods.zip - os: windows-latest displayName: windows archivePortable: 7z a -r jabgui/build/packages/windows-latest/JabRef-portable_windows.zip ./jabgui/build/packages/windows-latest/JabRef && rm -R jabgui/build/packages/windows-latest/JabRef @@ -157,6 +171,7 @@ jobs: archivePortableJabLS: 7z a -r jabls-cli/build/packages/windows-latest/jabls-portable_windows.zip ./jabls-cli/build/packages/windows-latest/jabls && rm -R jabls-cli/build/packages/windows-latest/jabls suffix: '' archForDebianRepack: '' + eaJdkJmodsUrl: https://download2.gluonhq.com/openjfx/26/openjfx-26-ea+14_windows-x64_bin-jmods.zip - os: macos-15-intel # intel image displayName: macOS archivePortable: 7z a -r jabgui/build/packages/macos-15-intel/JabRef-portable_macos.zip ./jabgui/build/packages/macos-15-intel/JabRef.app && rm -R jabgui/build/packages/macos-15-intel/JabRef.app @@ -164,6 +179,7 @@ jobs: archivePortableJabLS: 7z a -r jabls-cli/build/packages/macos-15-intel/jabls-portable_macos.zip ./jabls-cli/build/packages/macos-15-intel/jabls.app && rm -R jabls-cli/build/packages/macos-15-intel/jabls.app suffix: '' archForDebianRepack: '' + eaJdkJmodsUrl: https://download2.gluonhq.com/openjfx/26/openjfx-26-ea+14_osx-x64_bin-jmods.zip - os: macos-15 displayName: macOS-arm archivePortable: 7z a -r jabgui/build/packages/macos-15/JabRef-portable_macos-arm.zip ./jabgui/build/packages/macos-15/JabRef.app && rm -R jabgui/build/packages/macos-15/JabRef.app @@ -171,6 +187,7 @@ jobs: archivePortableJabLS: 7z a -r jabls-cli/build/packages/macos-15/jabls-portable_macos-arm.zip ./jabls-cli/build/packages/macos-15/jabls.app && rm -R jabls-cli/build/packages/macos-15/jabls.app suffix: '_arm64' archForDebianRepack: '' + eaJdkJmodsUrl: https://download2.gluonhq.com/openjfx/26/openjfx-26-ea+14_osx-aarch64_bin-jmods.zip runs-on: ${{ matrix.os }} outputs: major: ${{ steps.gitversion.outputs.Major }} @@ -185,7 +202,7 @@ jobs: submodules: 'true' show-progress: 'false' - name: Install pigz and cache (linux) - if: (startsWith(matrix.os, 'ubuntu')) + if: startsWith(matrix.os, 'ubuntu') uses: awalsh128/cache-apt-pkgs-action@latest with: packages: pigz @@ -197,12 +214,54 @@ jobs: - name: Run GitVersion id: gitversion uses: gittools/actions/gitversion/execute@v3.2.1 - - name: Setup JDK + + # region setup-JDK + - name: 'Set up latest JDK EA from jdk.java.net' + if: ${{ needs.conditions.outputs.eaJdk == 'true' }} + uses: oracle-actions/setup-java@v1 + with: + website: jdk.java.net + release: EA + - name: Tell gradle to use JDK 26 (macOS) + if: ${{ needs.conditions.outputs.eaJdk == 'true' && (startsWith(matrix.os, 'macos')) }} + run: | + sed -i '' "s/JavaLanguageVersion.of(25)/JavaLanguageVersion.of(26)/" build-logic/src/main/kotlin/org.jabref.gradle.feature.compile.gradle.kts + sed -i '' "s/AMAZON/ORACLE/" build-logic/src/main/kotlin/org.jabref.gradle.feature.compile.gradle.kts + - name: Tell gradle to use JDK 26 (linux, Windows) + if: ${{ needs.conditions.outputs.eaJdk == 'true' && (!startsWith(matrix.os, 'macos')) }} + run: | + sed -i "s/JavaLanguageVersion.of(25)/JavaLanguageVersion.of(26)/" build-logic/src/main/kotlin/org.jabref.gradle.feature.compile.gradle.kts + sed -i "s/AMAZON/ORACLE/" build-logic/src/main/kotlin/org.jabref.gradle.feature.compile.gradle.kts + - name: Download JavaFX JMODs (linux, macOS) + if: ${{ (needs.conditions.outputs.eaJdk == 'true') && (matrix.os != 'windows-latest') }} + uses: ethanjli/cached-download-action@v0.1.3 + with: + url: ${{ matrix.eaJdkJmodsUrl }} + destination: /tmp/jmods.zip + - name: Download JavaFX JMODs (Windows) + if: ${{ (needs.conditions.outputs.eaJdk == 'true') && (matrix.os == 'windows-latest') }} + uses: ethanjli/cached-download-action@v0.1.3 + with: + url: ${{ matrix.eaJdkJmodsUrl }} + destination: "C:\\temp\\jmods.zip" + - name: Extract JavaFX JMODs (linux, macOS) + if: ${{ (needs.conditions.outputs.eaJdk == 'true') && (matrix.os != 'windows-latest') }} + run: | + cd /tmp + unzip jmods.zip "javafx-jmods-26/jdk.jsobject.jmod" + - name: Extract JavaFX JMODs (Windows) + if: ${{ (needs.conditions.outputs.eaJdk == 'true') && (matrix.os == 'windows-latest') }} + run: | + cd C:\temp + unzip jmods.zip "javafx-jmods-26/jdk.jsobject.jmod" + - name: Setup JDK (runtime for gradle) uses: actions/setup-java@v5 with: - java-version: '24' + java-version: 25 distribution: 'corretto' check-latest: true + # endregion + - name: Setup Gradle uses: gradle/actions/setup-gradle@v5 - name: Generate JBang cache key @@ -226,7 +285,7 @@ jobs: with: p12-file-base64: ${{ secrets.OSX_SIGNING_CERT }} p12-password: ${{ secrets.OSX_CERT_PWD }} - keychain-password: jabref + keychain-password: tEmPoRaRY-PaeSWD - name: Setup macOS key chain for app id cert if: (startsWith(matrix.os, 'macos')) && (needs.conditions.outputs.secretspresent == 'true') uses: slidoapp/import-codesign-certs@1923310662e8682dd05b76b612b53301f431cd5d @@ -234,10 +293,10 @@ jobs: p12-file-base64: ${{ secrets.OSX_SIGNING_CERT_APPLICATION }} p12-password: ${{ secrets.OSX_CERT_PWD }} create-keychain: false - keychain-password: jabref + keychain-password: tEmPoRaRY-PaeSWD - name: Build runtime image and installer shell: bash - run: ./gradlew -i -PprojVersion="${{ steps.gitversion.outputs.AssemblySemVer }}" -PprojVersionInfo="${{ steps.gitversion.outputs.InformationalVersion }}" :jabgui:jpackage + run: ./gradlew -i -PeaJdkBuild="${{ needs.conditions.outputs.eaJdk }}" -PprojVersion="${{ steps.gitversion.outputs.AssemblySemVer }}" -PprojVersionInfo="${{ steps.gitversion.outputs.InformationalVersion }}" :jabgui:jpackage - name: Package JabGui application image shell: bash run: | @@ -315,12 +374,7 @@ jobs: # for rsync installed by chocolatey, we need the ssh.exe delivered with that installation run: | rsync -rt --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r --itemize-changes --stats --rsync-path="mkdir -p /var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }} && rsync" -e 'C:\ProgramData\chocolatey\lib\rsync\tools\bin\ssh.exe -p 9922 -i sshkey -o StrictHostKeyChecking=no' jabgui/build/packages/${{ matrix.os }}/ jrrsync@build-upload.jabref.org:/var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }}/ || true - - name: Upload jabkkit to builds.jabref.org (Windows) - if: ${{ (steps.diskspace.outputs.available == 'true') && (matrix.os == 'windows-latest') }} - shell: cmd - run: | - rsync -rt --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r --itemize-changes --stats --rsync-path="mkdir -p /var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }} && rsync" -e 'C:\ProgramData\chocolatey\lib\rsync\tools\bin\ssh.exe -p 9922 -i sshkey -o StrictHostKeyChecking=no' jabkit/build/packages/${{ matrix.os }}/ jrrsync@build-upload.jabref.org:/var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }}/ || true - - name: Upload jabls-cli to builds.jabref.org (Windows) + - name: Upload jabls to builds.jabref.org (Windows) if: ${{ (steps.diskspace.outputs.available == 'true') && (matrix.os == 'windows-latest') }} shell: cmd run: | @@ -330,12 +384,7 @@ jobs: shell: bash run: | rsync -rt --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r --itemize-changes --stats --rsync-path="mkdir -p /var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }} && rsync" -e 'ssh -p 9922 -i sshkey -o StrictHostKeyChecking=no' jabgui/build/packages/${{ matrix.os }}/ jrrsync@build-upload.jabref.org:/var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }}/ || true - - name: Upload jabkit to builds.jabref.org (linux, macOS) - if: ${{ (steps.diskspace.outputs.available == 'true') && (startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'ubuntu')) }} - shell: bash - run: | - rsync -rt --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r --itemize-changes --stats --rsync-path="mkdir -p /var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }} && rsync" -e 'ssh -p 9922 -i sshkey -o StrictHostKeyChecking=no' jabkit/build/packages/${{ matrix.os }}/ jrrsync@build-upload.jabref.org:/var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }}/ || true - - name: Upload jabls-cli to builds.jabref.org (linux, macOS) + - name: Upload jabls to builds.jabref.org (linux, macOS) if: ${{ (steps.diskspace.outputs.available == 'true') && (startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'ubuntu')) }} shell: bash run: | @@ -348,12 +397,11 @@ jobs: name: JabRef-${{ matrix.os }}-tbn path: | jabgui/build/packages/${{ matrix.os }} - jabkit/build/packages/${{ matrix.os }} + jabls-cli/build/packages/${{ matrix.os }} compression-level: 0 # no compression # endregion - comment-on-pr: - name: Comment on PR + comment-on-issue-and-pr: # separate job, because it should wait until all binaries are available needs: [conditions, build] if: ${{ (github.event_name == 'pull_request') && (needs.conditions.outputs.upload-to-builds-jabref-org == 'true') }} @@ -366,14 +414,8 @@ jobs: The build of this PR is available at . comment-tag: download-link mode: recreate - - comment-on-issue: - name: Comment on issue - # separate job, because it should wait until all binaries are available - needs: [conditions, build] - if: ${{ (github.event_name == 'pull_request') && (needs.conditions.outputs.upload-to-builds-jabref-org == 'true') }} - runs-on: ubuntu-latest - steps: + - name: Create GitHub Summary + run: echo "The build of this PR is available at ." >> "$GITHUB_STEP_SUMMARY" - name: echo PR data run: | echo "PR Number: ${{ github.event.pull_request.number }}" @@ -421,9 +463,23 @@ jobs: include: - os: macos-15 displayName: macOS (ARM64) + path: 'jabgui' + prefix: 'JabRef' suffix: '_arm64' - - os: macos-15-intel # intel image + - os: macos-15-intel + displayName: macOS + path: 'jabgui' + prefix: 'JabRef' + suffix: '' + - os: macos-15 + displayName: macOS (ARM64) + path: 'jabls' + prefix: 'jabls' + suffix: '_arm64' + - os: macos-15-intel displayName: macOS + path: 'jabls' + prefix: 'jabls' suffix: '' runs-on: ${{ matrix.os }} steps: @@ -434,21 +490,21 @@ jobs: - name: Notarize dmg shell: bash run: | - cd jabgui + cd ${{ matrix.path }} find . -type f xcrun notarytool store-credentials "notarytool-profile" --apple-id "vorstand@jabref.org" --team-id "6792V39SK3" --password "${{ secrets.OSX_NOTARIZATION_APP_PWD }}" - xcrun notarytool submit build/packages/${{ matrix.os }}/JabRef-${{ needs.build.outputs.major }}.${{ needs.build.outputs.minor }}${{ matrix.suffix}}.dmg --keychain-profile "notarytool-profile" --wait - xcrun stapler staple build/packages/${{ matrix.os }}/JabRef-${{ needs.build.outputs.major }}.${{ needs.build.outputs.minor }}${{ matrix.suffix}}.dmg + xcrun notarytool submit build/packages/${{ matrix.os }}/${{ matrix.prefix }}-${{ needs.build.outputs.major }}.${{ needs.build.outputs.minor }}${{ matrix.suffix}}.dmg --keychain-profile "notarytool-profile" --wait + xcrun stapler staple build/packages/${{ matrix.os }}/${{ matrix.prefix }}-${{ needs.build.outputs.major }}.${{ needs.build.outputs.minor }}${{ matrix.suffix}}.dmg - name: Notarize pkg shell: bash run: | - cd jabgui + cd ${{ matrix.path }} xcrun notarytool store-credentials "notarytool-profile" --apple-id "vorstand@jabref.org" --team-id "6792V39SK3" --password "${{ secrets.OSX_NOTARIZATION_APP_PWD }}" - xcrun notarytool submit build/packages/${{ matrix.os }}/JabRef-${{ needs.build.outputs.major }}.${{ needs.build.outputs.minor }}${{ matrix.suffix}}.pkg --keychain-profile "notarytool-profile" --wait - xcrun stapler staple build/packages/${{ matrix.os }}/JabRef-${{ needs.build.outputs.major }}.${{ needs.build.outputs.minor }}${{ matrix.suffix}}.pkg + xcrun notarytool submit build/packages/${{ matrix.os }}/${{ matrix.prefix }}-${{ needs.build.outputs.major }}.${{ needs.build.outputs.minor }}${{ matrix.suffix}}.pkg --keychain-profile "notarytool-profile" --wait + xcrun stapler staple build/packages/${{ matrix.os }}/${{ matrix.prefix }}-${{ needs.build.outputs.major }}.${{ needs.build.outputs.minor }}${{ matrix.suffix}}.pkg - name: Upload to builds.jabref.org shell: bash run: | echo "${{ secrets.buildJabRefPrivateKey }}" > sshkey chmod 600 sshkey - rsync -rt --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r --itemize-changes --stats --rsync-path="mkdir -p /var/www/builds.jabref.org/www/${{ needs.build.outputs.branchname }} && rsync" -e 'ssh -p 9922 -i sshkey -o StrictHostKeyChecking=no' jabgui/build/packages/${{ matrix.os }}/ jrrsync@build-upload.jabref.org:/var/www/builds.jabref.org/www/${{ needs.build.outputs.branchname }}/ + rsync -rt --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r --itemize-changes --stats --rsync-path="mkdir -p /var/www/builds.jabref.org/www/${{ needs.build.outputs.branchname }} && rsync" -e 'ssh -p 9922 -i sshkey -o StrictHostKeyChecking=no' ${{ matrix.path }}/build/packages/${{ matrix.os }}/ jrrsync@build-upload.jabref.org:/var/www/builds.jabref.org/www/${{ needs.build.outputs.branchname }}/ diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 2309ab86425..bd332786578 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -92,7 +92,7 @@ jobs: - name: Setup JDK uses: actions/setup-java@v5 with: - java-version: '24' + java-version: 25 distribution: 'corretto' check-latest: true - name: Setup Gradle diff --git a/.github/workflows/run-openrewrite.yml b/.github/workflows/run-openrewrite.yml index 20902e92c44..46170cef9b3 100644 --- a/.github/workflows/run-openrewrite.yml +++ b/.github/workflows/run-openrewrite.yml @@ -33,7 +33,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v5 with: - java-version: 24 + java-version: 25 distribution: 'corretto' check-latest: true - name: Setup Gradle diff --git a/.github/workflows/sbom-pr.yml b/.github/workflows/sbom-pr.yml index 7defde223f9..fb9f77a0515 100644 --- a/.github/workflows/sbom-pr.yml +++ b/.github/workflows/sbom-pr.yml @@ -22,7 +22,7 @@ jobs: uses: actions/setup-java@v5 with: distribution: 'corretto' - java-version: '24' + java-version: 25 check-latest: true cache: 'gradle' diff --git a/.github/workflows/tests-code-fetchers.yml b/.github/workflows/tests-code-fetchers.yml index 91f3238e399..56f0d4a85ac 100644 --- a/.github/workflows/tests-code-fetchers.yml +++ b/.github/workflows/tests-code-fetchers.yml @@ -56,7 +56,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v5 with: - java-version: 24 + java-version: 25 distribution: 'corretto' check-latest: true - name: Setup Gradle diff --git a/.github/workflows/tests-code.yml b/.github/workflows/tests-code.yml index 58b4c15dbc5..cd9c92bcbae 100644 --- a/.github/workflows/tests-code.yml +++ b/.github/workflows/tests-code.yml @@ -52,7 +52,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v5 with: - java-version: 24 + java-version: 25 distribution: 'corretto' check-latest: true - name: Run checkstyle reporter @@ -92,7 +92,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v5 with: - java-version: 24 + java-version: 25 distribution: 'corretto' check-latest: true - name: Setup Gradle @@ -130,6 +130,8 @@ jobs: modernizer: name: Modernizer runs-on: ubuntu-latest + # Version 1.11.0 does not run on JDK25: "java.lang.reflect.InvocationTargetException" + if: false steps: - name: Checkout source uses: actions/checkout@v5 @@ -139,7 +141,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v5 with: - java-version: 24 + java-version: 25 distribution: 'corretto' check-latest: true - name: Setup Gradle @@ -257,7 +259,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v5 with: - java-version: 24 + java-version: 25 distribution: 'corretto' check-latest: true - name: Setup Gradle @@ -293,7 +295,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v5 with: - java-version: 24 + java-version: 25 distribution: 'corretto' check-latest: true - name: Generate JBang cache key @@ -342,7 +344,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v5 with: - java-version: 24 + java-version: 25 distribution: 'corretto' check-latest: true - name: Setup Gradle @@ -392,7 +394,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v5 with: - java-version: 24 + java-version: 25 distribution: 'corretto' check-latest: true - name: Setup Gradle @@ -441,7 +443,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v5 with: - java-version: 24 + java-version: 25 distribution: 'corretto' check-latest: true - name: Generate JBang cache key @@ -485,7 +487,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v5 with: - java-version: 24 + java-version: 25 distribution: 'corretto' check-latest: true - name: Generate JBang cache key @@ -562,7 +564,7 @@ jobs: if: github.ref == 'refs/heads/main' uses: actions/setup-java@v5 with: - java-version: 24 + java-version: 25 distribution: 'corretto' check-latest: true - name: Setup Gradle @@ -608,7 +610,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v5 with: - java-version: 24 + java-version: 25 distribution: 'corretto' check-latest: true - name: Setup Gradle diff --git a/.jbang/CheckoutPR.java b/.jbang/CheckoutPR.java index 98938af602e..4d48676a8f4 100755 --- a/.jbang/CheckoutPR.java +++ b/.jbang/CheckoutPR.java @@ -24,7 +24,7 @@ //DEPS org.eclipse.jgit:org.eclipse.jgit.pgm:7.4.0.202509020913-r public class CheckoutPR { - public static void main(String[] args) throws Exception { + static void main(String[] args) throws Exception { GitHub github = new GitHubBuilder().build(); GHRepository repo = github.getRepository("JabRef/jabref"); diff --git a/.jbang/CloneJabRef.java b/.jbang/CloneJabRef.java index 736008e1a0b..d9a379c2508 100755 --- a/.jbang/CloneJabRef.java +++ b/.jbang/CloneJabRef.java @@ -9,7 +9,7 @@ //DEPS org.eclipse.jgit:org.eclipse.jgit.pgm:7.4.0.202509020913-r public class CloneJabRef { - public static void main(String[] args) throws Exception { + static void main(String[] args) throws Exception { Path targetDir; if (args.length == 1) { targetDir = Path.of(args[0]).toAbsolutePath(); diff --git a/.jbang/JabKitLauncher.java b/.jbang/JabKitLauncher.java index ed0234acec5..121a5565dff 100755 --- a/.jbang/JabKitLauncher.java +++ b/.jbang/JabKitLauncher.java @@ -2,7 +2,7 @@ //DESCRIPTION jabkit - mange BibTeX files using JabRef -//JAVA 24 +//JAVA 25 //RUNTIME_OPTIONS --enable-native-access=ALL-UNNAMED //SOURCES ../jabkit/src/main/java/org/jabref/cli/converter/CygWinPathConverter.java @@ -42,7 +42,7 @@ /// This class is required for [jbang](https://www.jbang.dev/) public class JabKitLauncher { - public static void main(String[] args) { + static void main(String[] args) { org.jabref.JabKit.main(args); } } diff --git a/.jbang/JabLsLauncher.java b/.jbang/JabLsLauncher.java index 0dc3303f7fc..19b5ee264d2 100755 --- a/.jbang/JabLsLauncher.java +++ b/.jbang/JabLsLauncher.java @@ -2,7 +2,7 @@ //DESCRIPTION jabls - start a bibtex languageserver -//JAVA 24 +//JAVA 25 //RUNTIME_OPTIONS --enable-native-access=ALL-UNNAMED //SOURCES ../jabls-cli/src/main/java/org/jabref/languageserver/cli/ServerCli.java @@ -54,7 +54,7 @@ /// This class is required for [jbang](https://www.jbang.dev/) public class JabLsLauncher { - public static void main(String[] args) throws Exception { + static void main(String[] args) throws Exception { org.jabref.languageserver.cli.ServerCli.main(args); } } diff --git a/.jbang/JabSrvLauncher.java b/.jbang/JabSrvLauncher.java index 83cc7ab2fe0..a8f7f111331 100755 --- a/.jbang/JabSrvLauncher.java +++ b/.jbang/JabSrvLauncher.java @@ -2,7 +2,7 @@ //DESCRIPTION jabsrv - serve BibTeX files using JabRef -//JAVA 24 +//JAVA 25 //RUNTIME_OPTIONS --enable-native-access=ALL-UNNAMED //SOURCES ../jabsrv-cli/src/main/java/org/jabref/http/server/cli/ServerCli.java @@ -92,7 +92,7 @@ /// This class is required for [jbang](https://www.jbang.dev/) public class JabSrvLauncher { - public static void main(String[] args) throws Exception { + static void main(String[] args) throws Exception { org.jabref.http.server.cli.ServerCli.main(args); } } diff --git a/.moderne/moderne.yml b/.moderne/moderne.yml index 970c3c0479c..7159802fb6f 100644 --- a/.moderne/moderne.yml +++ b/.moderne/moderne.yml @@ -1,3 +1,3 @@ specs: specs.moderne.ai/v1/cli java: - selectedJdk: '24' + selectedJdk: '25' diff --git a/.sdkmanrc b/.sdkmanrc index d5223a11a4a..26ac25ebe80 100644 --- a/.sdkmanrc +++ b/.sdkmanrc @@ -1,2 +1,2 @@ -java=24.0.2-tem +java=25-tem #visualvm=2.1.10 diff --git a/build-logic/src/main/kotlin/org.jabref.gradle.base.dependency-rules.gradle.kts b/build-logic/src/main/kotlin/org.jabref.gradle.base.dependency-rules.gradle.kts index 157b0487539..d829422126a 100644 --- a/build-logic/src/main/kotlin/org.jabref.gradle.base.dependency-rules.gradle.kts +++ b/build-logic/src/main/kotlin/org.jabref.gradle.base.dependency-rules.gradle.kts @@ -28,6 +28,8 @@ jvmDependencyConflicts.patch { addTargetPlatformVariant("mac", OperatingSystemFamily.MACOS, MachineArchitecture.X86_64) addTargetPlatformVariant("mac-aarch64", OperatingSystemFamily.MACOS, MachineArchitecture.ARM64) addTargetPlatformVariant("win", OperatingSystemFamily.WINDOWS, MachineArchitecture.X86_64) + // Since JDK26 delivered as JMOD + removeDependency("org.openjfx:jdk-jsobject") } } // Source: https://github.com/jjohannes/java-module-system/blob/be19f6c088dca511b6d9a7487dacf0b715dbadc1/gradle/plugins/src/main/kotlin/metadata-patch.gradle.kts#L9 @@ -558,8 +560,6 @@ extraJavaModuleInfo { requiresTransitive("jdk.unsupported") } - module("org.openjfx:jdk-jsobject", "jdk.jsobjectEmpty") {} - module("org.controlsfx:controlsfx", "org.controlsfx.controls") { patchRealModule() diff --git a/build-logic/src/main/kotlin/org.jabref.gradle.feature.compile.gradle.kts b/build-logic/src/main/kotlin/org.jabref.gradle.feature.compile.gradle.kts index 12bf831596e..d5d1a747bdd 100644 --- a/build-logic/src/main/kotlin/org.jabref.gradle.feature.compile.gradle.kts +++ b/build-logic/src/main/kotlin/org.jabref.gradle.feature.compile.gradle.kts @@ -8,14 +8,15 @@ java { // - build.gradle -> jacoco -> toolVersion (because JaCoCo does not support newest JDK out of the box. Check versions at https://www.jacoco.org/jacoco/trunk/doc/changes.html) // - jitpack.yml // - .devcontainer/devcontainer.json#L34 - there, also check if the gradleVersion matches the one of gradle/wrapper/gradle-wrapper.properties - // - .moderne/moderne.yml // - .github/workflows/binaries*.yml // - .github/workflows/publish.yml // - .github/workflows/tests*.yml - // - .github/workflows/update-gradle-wrapper.yml - // - docs/getting-into-the-code/guidelines-for-setting-up-a-local-workspace/intellij-12-build.md + // - .jbang/Jab*.java + // - .moderne/moderne.yml // - .sdkmanrc - languageVersion = JavaLanguageVersion.of(24) + // - build-support/src/main/java/*.java + // - docs/getting-into-the-code/guidelines-for-setting-up-a-local-workspace/intellij-12-build.md + languageVersion = JavaLanguageVersion.of(25) // See https://docs.gradle.org/current/javadoc/org/gradle/jvm/toolchain/JvmVendorSpec.html for a full list // Temurin does not ship jmods, thus we need to use another JDK -- see https://github.com/actions/setup-java/issues/804 // We also need a JDK without JavaFX, because we patch JavaFX due to modularity issues @@ -24,5 +25,5 @@ java { } tasks.withType().configureEach { - options.release = 24 + options.release = 25 } diff --git a/build-support/src/main/java/CitationStyleCatalogGenerator.java b/build-support/src/main/java/CitationStyleCatalogGenerator.java index d16f4d99cbd..e635d757ace 100644 --- a/build-support/src/main/java/CitationStyleCatalogGenerator.java +++ b/build-support/src/main/java/CitationStyleCatalogGenerator.java @@ -1,4 +1,4 @@ -//JAVA 24 +//JAVA 25+ //RUNTIME_OPTIONS --enable-native-access=ALL-UNNAMED //DEPS com.fasterxml.jackson.core:jackson-databind:2.17.1 @@ -45,7 +45,7 @@ public class CitationStyleCatalogGenerator { private static final Logger LOGGER = LoggerFactory.getLogger(CitationStyleCatalogGenerator.class); - public static void main(String[] args) { + static void main(String[] args) { generateCitationStyleCatalog(); } diff --git a/build-support/src/main/java/JournalListMvGenerator.java b/build-support/src/main/java/JournalListMvGenerator.java index 64faf6555f0..5535cd14c10 100644 --- a/build-support/src/main/java/JournalListMvGenerator.java +++ b/build-support/src/main/java/JournalListMvGenerator.java @@ -1,4 +1,4 @@ -//JAVA 24 +//JAVA 25+ //RUNTIME_OPTIONS --enable-native-access=ALL-UNNAMED //DEPS com.h2database:h2:2.2.224 @@ -48,7 +48,7 @@ public class JournalListMvGenerator { private static final Logger LOGGER = LoggerFactory.getLogger(JournalListMvGenerator.class); - public static void main(String[] args) throws IOException { + static void main(String[] args) throws IOException { boolean verbose = (args.length == 1) && ("--verbose".equals(args[0])); Path abbreviationsDirectory = Path.of("jablib", "src", "main", "abbrv.jabref.org", "journals"); diff --git a/build-support/src/main/java/LtwaListMvGenerator.java b/build-support/src/main/java/LtwaListMvGenerator.java index 523ee73ce59..0477cf391ae 100644 --- a/build-support/src/main/java/LtwaListMvGenerator.java +++ b/build-support/src/main/java/LtwaListMvGenerator.java @@ -1,4 +1,4 @@ -//JAVA 24 +//JAVA 25+ //RUNTIME_OPTIONS --enable-native-access=ALL-UNNAMED //DEPS com.h2database:h2:2.2.224 @@ -46,7 +46,7 @@ public class LtwaListMvGenerator { private static final Logger LOGGER = LoggerFactory.getLogger(LtwaListMvGenerator.class); - public static void main(String[] args) { + static void main(String[] args) { try { Path tempCsvFile = Path.of("jablib", "build", "tmp", "ltwa_20210702.csv"); if (!Files.exists(tempCsvFile)) { diff --git a/docs/code-howtos/eventbus.md b/docs/code-howtos/eventbus.md index b6a76fd9b0e..49c2dc3e1df 100644 --- a/docs/code-howtos/eventbus.md +++ b/docs/code-howtos/eventbus.md @@ -49,7 +49,7 @@ import com.google.common.eventbus.EventBus; public class Main { private static EventBus eventBus = new EventBus(); - public static void main(String[] args) { + static void main(String[] args) { Main main = new Main(); Listener listener = new Listener(); eventBus.register(listener); diff --git a/docs/getting-into-the-code/guidelines-for-setting-up-a-local-workspace/intellij-12-build.md b/docs/getting-into-the-code/guidelines-for-setting-up-a-local-workspace/intellij-12-build.md index c83acd5434d..56a4257e143 100644 --- a/docs/getting-into-the-code/guidelines-for-setting-up-a-local-workspace/intellij-12-build.md +++ b/docs/getting-into-the-code/guidelines-for-setting-up-a-local-workspace/intellij-12-build.md @@ -33,13 +33,13 @@ Go to "File > Project Structure" or press Ctrl+Shift+ ![Open Project Structure](12-02-open-project-settings.png) {% endfigure %} -Click on "Project" on the left side. Then, select **temurin-24** as the project SDK (continue reading if this option is not available). +Click on "Project" on the left side. Then, select **temurin-25** as the project SDK (continue reading if this option is not available). {% figure caption:"Project Structure - Project SDK" %} ![Project Structure - Project SDK](12-03-project-sdk.png) {% endfigure %} -If you do not have the access to this JDK, download it by clicking on "Download JDK..." In the dialog that opens, select version 24, vendor "Eclipse Temurin (AdoptOpenJDK HotSpot)", and click "Download". +If you do not have the access to this JDK, download it by clicking on "Download JDK..." In the dialog that opens, select version 25, vendor "Eclipse Temurin (AdoptOpenJDK HotSpot)", and click "Download". {% figure caption:"Dropdown to select Download JDK" %} ![Dropdown to select Download JDK](12-04-download-jdk.png) diff --git a/jabgui/build.gradle.kts b/jabgui/build.gradle.kts index 39470fea545..d9586c2684e 100644 --- a/jabgui/build.gradle.kts +++ b/jabgui/build.gradle.kts @@ -28,9 +28,6 @@ dependencies { implementation("com.pixelduke:fxthemes") - // From JavaFX25 onwards - implementation("org.openjfx:jdk-jsobject") - implementation("org.slf4j:slf4j-api") implementation("org.tinylog:tinylog-api") implementation("org.tinylog:slf4j-tinylog") @@ -191,7 +188,7 @@ javaModulePackaging { } targetsWithOs("macos") { options.addAll( - "--icon", "$projectDir/src/main/resources/icons/jabref.icns", + "--icon", "$projectDir/buildres/macos/JabRef.icns", "--mac-package-identifier", "JabRef", "--mac-package-name", "JabRef", "--file-associations", "$projectDir/buildres/macos/bibtexAssociations.properties", @@ -200,7 +197,7 @@ javaModulePackaging { options.addAll( "--mac-sign", "--mac-signing-key-user-name", "JabRef e.V. (6792V39SK3)", - "--mac-package-signing-prefix", "org.jabref", + "--mac-package-signing-prefix", "org.jabref.", ) } targetResources.from(layout.projectDirectory.dir("buildres/macos").asFileTree.matching { @@ -209,6 +206,20 @@ javaModulePackaging { } } +if (project.findProperty("eaJdkBuild")?.toString() == "true") { + // Required by https://github.com/openjdk/jfx/blob/jfx24/doc-files/release-notes-24.md#applications-using-jlink-to-create-a-custom-java-runtime-image + // Hint from https://github.com/gradlex-org/java-module-packaging/issues/77#issuecomment-3388409856 + val os = org.gradle.internal.os.OperatingSystem.current(); + if (os.isWindows()) { + tasks.withType().configureEach { modulePath.from("c:\\temp\\javafx-jmods-26") } + } else { + // dependencies { runtimeOnly(files("/tmp/javafx-jmods-26")) } // probably not required + + // Note that ".from" adds to the path and does not replace (https://docs.gradle.org/current/javadoc/org/gradle/api/file/ConfigurableFileCollection.html#from(java.lang.Object...)) + tasks.withType().configureEach { modulePath.from("/tmp/javafx-jmods-26") } + } +} + javaModuleTesting.whitebox(testing.suites["test"]) { requires.add("org.jabref.testsupport") diff --git a/jabgui/buildres/macos/Info-lite.plist.template b/jabgui/buildres/macos/Info-lite.plist.template deleted file mode 100644 index 509eb841ef9..00000000000 --- a/jabgui/buildres/macos/Info-lite.plist.template +++ /dev/null @@ -1,39 +0,0 @@ - - - - - LSMinimumSystemVersion - 10.9 - CFBundleDevelopmentRegion - English - CFBundleAllowMixedLocalizations - - CFBundleExecutable - DEPLOY_LAUNCHER_NAME - CFBundleIconFile - DEPLOY_ICON_FILE - CFBundleIdentifier - DEPLOY_BUNDLE_IDENTIFIER - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - DEPLOY_BUNDLE_NAME - CFBundlePackageType - APPL - CFBundleShortVersionString - DEPLOY_BUNDLE_SHORT_VERSION - CFBundleSignature - ???? - - LSApplicationCategoryType - Unknown - CFBundleVersion - DEPLOY_BUNDLE_CFBUNDLE_VERSION - NSHumanReadableCopyright - DEPLOY_BUNDLE_COPYRIGHTDEPLOY_FILE_ASSOCIATIONS - NSHighResolutionCapable - true - NSSupportsAutomaticGraphicsSwitching - - - diff --git a/jabgui/buildres/macos/Info.plist b/jabgui/buildres/macos/Info.plist deleted file mode 100644 index 509eb841ef9..00000000000 --- a/jabgui/buildres/macos/Info.plist +++ /dev/null @@ -1,39 +0,0 @@ - - - - - LSMinimumSystemVersion - 10.9 - CFBundleDevelopmentRegion - English - CFBundleAllowMixedLocalizations - - CFBundleExecutable - DEPLOY_LAUNCHER_NAME - CFBundleIconFile - DEPLOY_ICON_FILE - CFBundleIdentifier - DEPLOY_BUNDLE_IDENTIFIER - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - DEPLOY_BUNDLE_NAME - CFBundlePackageType - APPL - CFBundleShortVersionString - DEPLOY_BUNDLE_SHORT_VERSION - CFBundleSignature - ???? - - LSApplicationCategoryType - Unknown - CFBundleVersion - DEPLOY_BUNDLE_CFBUNDLE_VERSION - NSHumanReadableCopyright - DEPLOY_BUNDLE_COPYRIGHTDEPLOY_FILE_ASSOCIATIONS - NSHighResolutionCapable - true - NSSupportsAutomaticGraphicsSwitching - - - diff --git a/jabgui/buildres/macos/Info.plist.template b/jabgui/buildres/macos/Info.plist.template deleted file mode 100644 index 509eb841ef9..00000000000 --- a/jabgui/buildres/macos/Info.plist.template +++ /dev/null @@ -1,39 +0,0 @@ - - - - - LSMinimumSystemVersion - 10.9 - CFBundleDevelopmentRegion - English - CFBundleAllowMixedLocalizations - - CFBundleExecutable - DEPLOY_LAUNCHER_NAME - CFBundleIconFile - DEPLOY_ICON_FILE - CFBundleIdentifier - DEPLOY_BUNDLE_IDENTIFIER - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - DEPLOY_BUNDLE_NAME - CFBundlePackageType - APPL - CFBundleShortVersionString - DEPLOY_BUNDLE_SHORT_VERSION - CFBundleSignature - ???? - - LSApplicationCategoryType - Unknown - CFBundleVersion - DEPLOY_BUNDLE_CFBUNDLE_VERSION - NSHumanReadableCopyright - DEPLOY_BUNDLE_COPYRIGHTDEPLOY_FILE_ASSOCIATIONS - NSHighResolutionCapable - true - NSSupportsAutomaticGraphicsSwitching - - - diff --git a/jabgui/buildres/macos/Jabref-volume.icns b/jabgui/buildres/macos/JabRef.icns similarity index 100% rename from jabgui/buildres/macos/Jabref-volume.icns rename to jabgui/buildres/macos/JabRef.icns diff --git a/jabgui/buildres/macos/README.md b/jabgui/buildres/macos/README.md index 495b5742d73..e297503263d 100644 --- a/jabgui/buildres/macos/README.md +++ b/jabgui/buildres/macos/README.md @@ -2,8 +2,9 @@ ## Modifying DMG Setup scpt -Rename `JabRef-dmg-setup.scpt script` to `JabRef-dmg-setup.applescript`. -Only modify the `JabRef-dmg-setup.applescript` in the macOS Script Editor. Afterwards copy over the file and rename it to `JabRef-dmg-setup.scpt`. +Rename `JabRef-dmg-setup.scpt` script to `JabRef-dmg-setup.applescript`. +Only modify the `JabRef-dmg-setup.applescript` in the macOS Script Editor. +Afterwards, copy over the file and rename it to `JabRef-dmg-setup.scpt`. Normally the `scpt` file is a binary compiled variant and the `.applescript` the uncompiled format but jpackage expects the sctp in uncompiled format ## Generate iconsets diff --git a/jabgui/buildres/macos/Runtime-Info.plist b/jabgui/buildres/macos/Runtime-Info.plist deleted file mode 100644 index 76fb7eeb134..00000000000 --- a/jabgui/buildres/macos/Runtime-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - libjli.dylib - CFBundleIdentifier - CF_BUNDLE_IDENTIFIER - CFBundleInfoDictionaryVersion - 7.0 - CFBundleName - CF_BUNDLE_NAME - CFBundlePackageType - BNDL - CFBundleShortVersionString - CF_BUNDLE_SHORT_VERSION_STRING - CFBundleSignature - ???? - CFBundleVersion - CF_BUNDLE_VERSION - NSSupportsAutomaticGraphicsSwitching - - - diff --git a/jabgui/buildres/macos/Runtime-Info.plist.template b/jabgui/buildres/macos/Runtime-Info.plist.template deleted file mode 100644 index 76fb7eeb134..00000000000 --- a/jabgui/buildres/macos/Runtime-Info.plist.template +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - libjli.dylib - CFBundleIdentifier - CF_BUNDLE_IDENTIFIER - CFBundleInfoDictionaryVersion - 7.0 - CFBundleName - CF_BUNDLE_NAME - CFBundlePackageType - BNDL - CFBundleShortVersionString - CF_BUNDLE_SHORT_VERSION_STRING - CFBundleSignature - ???? - CFBundleVersion - CF_BUNDLE_VERSION - NSSupportsAutomaticGraphicsSwitching - - - diff --git a/jabgui/buildres/macos/bibtexAssociations.properties b/jabgui/buildres/macos/bibtexAssociations.properties index 9db815dbbb5..a0839863798 100644 --- a/jabgui/buildres/macos/bibtexAssociations.properties +++ b/jabgui/buildres/macos/bibtexAssociations.properties @@ -1,4 +1,3 @@ extension=bib mime-type=text/x-bibtex description=BibTeX File -icon=jabref.icns diff --git a/jabgui/buildres/macos/info-lite.plist b/jabgui/buildres/macos/info-lite.plist deleted file mode 100644 index 509eb841ef9..00000000000 --- a/jabgui/buildres/macos/info-lite.plist +++ /dev/null @@ -1,39 +0,0 @@ - - - - - LSMinimumSystemVersion - 10.9 - CFBundleDevelopmentRegion - English - CFBundleAllowMixedLocalizations - - CFBundleExecutable - DEPLOY_LAUNCHER_NAME - CFBundleIconFile - DEPLOY_ICON_FILE - CFBundleIdentifier - DEPLOY_BUNDLE_IDENTIFIER - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - DEPLOY_BUNDLE_NAME - CFBundlePackageType - APPL - CFBundleShortVersionString - DEPLOY_BUNDLE_SHORT_VERSION - CFBundleSignature - ???? - - LSApplicationCategoryType - Unknown - CFBundleVersion - DEPLOY_BUNDLE_CFBUNDLE_VERSION - NSHumanReadableCopyright - DEPLOY_BUNDLE_COPYRIGHTDEPLOY_FILE_ASSOCIATIONS - NSHighResolutionCapable - true - NSSupportsAutomaticGraphicsSwitching - - - diff --git a/jabgui/buildres/macos/jabref.icns b/jabgui/buildres/macos/jabref.icns deleted file mode 100644 index e231e8d3bad..00000000000 Binary files a/jabgui/buildres/macos/jabref.icns and /dev/null differ diff --git a/jabgui/src/main/java/org/jabref/Launcher.java b/jabgui/src/main/java/org/jabref/Launcher.java index fdc3aa031e6..4913ae5a74d 100644 --- a/jabgui/src/main/java/org/jabref/Launcher.java +++ b/jabgui/src/main/java/org/jabref/Launcher.java @@ -50,7 +50,7 @@ public enum MultipleInstanceAction { FOCUS } - public static void main(String[] args) { + static void main(String[] args) { initLogging(args); Injector.setModelOrService(BuildInfo.class, new BuildInfo()); diff --git a/jabgui/src/main/resources/icons/jabref.icns b/jabgui/src/main/resources/icons/jabref.icns deleted file mode 100644 index e231e8d3bad..00000000000 Binary files a/jabgui/src/main/resources/icons/jabref.icns and /dev/null differ diff --git a/jabgui/src/test/java/org/jabref/testutils/interactive/styletester/StyleTesterMain.java b/jabgui/src/test/java/org/jabref/testutils/interactive/styletester/StyleTesterMain.java index c3a79927cba..ffaf6227125 100644 --- a/jabgui/src/test/java/org/jabref/testutils/interactive/styletester/StyleTesterMain.java +++ b/jabgui/src/test/java/org/jabref/testutils/interactive/styletester/StyleTesterMain.java @@ -15,7 +15,7 @@ */ public class StyleTesterMain extends Application { - public static void main(String[] args) { + static void main(String[] args) { launch(args); } diff --git a/jabkit/src/main/java/org/jabref/JabKit.java b/jabkit/src/main/java/org/jabref/JabKit.java index 04f917af1d5..2e7f3e394b0 100644 --- a/jabkit/src/main/java/org/jabref/JabKit.java +++ b/jabkit/src/main/java/org/jabref/JabKit.java @@ -58,6 +58,7 @@ public class JabKit { private static final String JABKIT_BRAND = "JabKit - command line toolkit for JabRef"; + /// @implNote method needs to be public, because JabKitLauncher calls it. public static void main(String[] args) { initLogging(args); diff --git a/jablib/src/jmh/java/org/jabref/benchmarks/Benchmarks.java b/jablib/src/jmh/java/org/jabref/benchmarks/Benchmarks.java index 97a379b4e6f..93f058a4005 100644 --- a/jablib/src/jmh/java/org/jabref/benchmarks/Benchmarks.java +++ b/jablib/src/jmh/java/org/jabref/benchmarks/Benchmarks.java @@ -145,7 +145,7 @@ public boolean keywordGroupContains() { return group.containsAll(database.getEntries()); } - public static void main(String[] args) throws IOException { + static void main(String[] args) throws IOException { Main.main(args); } } diff --git a/jabls-cli/src/main/java/org/jabref/languageserver/cli/ServerCli.java b/jabls-cli/src/main/java/org/jabref/languageserver/cli/ServerCli.java index b1a7515d3db..b06c33ce082 100644 --- a/jabls-cli/src/main/java/org/jabref/languageserver/cli/ServerCli.java +++ b/jabls-cli/src/main/java/org/jabref/languageserver/cli/ServerCli.java @@ -19,6 +19,7 @@ public class ServerCli implements Callable { @CommandLine.Option(names = {"-p", "--port"}, description = "the port") private Integer port = 2087; + /// @implNote method needs to be public, because JabLsLauncher calls it. public static void main(final String[] args) throws InterruptedException { SLF4JBridgeHandler.removeHandlersForRootLogger(); SLF4JBridgeHandler.install(); diff --git a/jabsrv-cli/src/main/java/org/jabref/http/server/cli/ServerCli.java b/jabsrv-cli/src/main/java/org/jabref/http/server/cli/ServerCli.java index 64465089090..c2c2142ccba 100644 --- a/jabsrv-cli/src/main/java/org/jabref/http/server/cli/ServerCli.java +++ b/jabsrv-cli/src/main/java/org/jabref/http/server/cli/ServerCli.java @@ -34,6 +34,8 @@ public class ServerCli implements Callable { /** * Starts an http server serving the last files opened in JabRef
* More files can be provided as args. + * + * @implNote method needs to be public, because JabServLauncher calls it. */ public static void main(final String[] args) throws InterruptedException { SLF4JBridgeHandler.removeHandlersForRootLogger(); diff --git a/jitpack.yml b/jitpack.yml index f42f228e421..ebdbf20b9ae 100644 --- a/jitpack.yml +++ b/jitpack.yml @@ -1,5 +1,5 @@ jdk: - - openjdk24 + - openjdk25 install: - ./gradlew :versions:publishToMavenLocal - ./gradlew :jablib:publishToMavenLocal diff --git a/versions/build.gradle.kts b/versions/build.gradle.kts index 87262f37646..820a7b32ba3 100644 --- a/versions/build.gradle.kts +++ b/versions/build.gradle.kts @@ -6,8 +6,11 @@ javaPlatform { allowDependencies() } +// in case this is updated, also .github/workflows/binaries.yml (look for "eaJdkJmodsUrl" and its use) val javafx = "25.0.1" + val lucene = "10.3.1" + val pdfbox = "3.0.5" dependencies { @@ -35,8 +38,6 @@ dependencies.constraints { api("org.openjfx:javafx-graphics:${javafx}") api("org.openjfx:javafx-swing:$javafx") api("org.openjfx:javafx-web:$javafx") - // from JavaFX25 onwards - api("org.openjfx:jdk-jsobject:$javafx") api("com.dlsc.gemsfx:gemsfx:3.5.7") api("com.dlsc.pdfviewfx:pdfviewfx:3.3.2")