badass-jlink-plugin icon indicating copy to clipboard operation
badass-jlink-plugin copied to clipboard

Task jpackage is failed

Open swardana opened this issue 4 years ago • 22 comments

I have a problem when executing jpackage command, below is the exception that I got when performing gradle jpackage:

> Task :jpackageImage
WARNING: Using incubator modules: jdk.incubator.jpackage

> Task :jpackage FAILED
WARNING: Using incubator modules: jdk.incubator.jpackage
java.io.IOException: Command [rpmbuild, -bb, /tmp/jdk.incubator.jpackage13899339881850936888/SPECS/ensia.spec, --define, %_sourcedir /tmp/jdk.incubator.jpackage13899339881850936888/images, --define, %_rpmdir /home/sukma/workspace/project/oss/ensia/build/jpackage, --define, %_topdir /tmp/jdk.incubator.jpackage13899339881850936888, --define, %_rpmfilename ensia-0.1-SNAPSHOT-1.x86_64.rpm] exited with 1 code


FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':jpackage'.
> Process 'command '/home/sukma/workspace/project/jdk-15.0.1+9/bin/jpackage'' finished with non-zero exit value 1

My environment is like below:

  • Java
openjdk version "11.0.9" 2020-10-20
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.9+11)
Eclipse OpenJ9 VM AdoptOpenJDK (build openj9-0.23.0, JRE 11 Linux amd64-64-Bit Compressed References 20201022_810 (JIT enabled, AOT enabled)
OpenJ9   - 0394ef754
OMR      - 582366ae5
JCL      - 3b09cfd7e9 based on jdk-11.0.9+11)
  • Jpackage from Java AdoptOpenJDK 15.0.1+9

  • OS

Slackware Linux 4.4.240 #1 SMP Wed Oct 21 15:59:03 CDT 2020 x86_64 Intel(R) Core(TM) i7-3612QM CPU @ 2.10GHz GenuineIntel GNU/Linux

swardana avatar Nov 19 '20 02:11 swardana

Add the --verboseoption to your build script:

jlink {
    ...
    jpackage {
        ....
        installerOptions += '--verbose'
    }
}

Then, execute:

./gradlew -i jpackage

This will print more details. Maybe it helps identifying the problem.

Also, please post your build.gradle.

siordache avatar Nov 19 '20 16:11 siordache

Ok, below is my build.gradle

plugins {
    id 'application'
    id 'org.openjfx.javafxplugin' version '0.0.9'
    id 'org.javamodularity.moduleplugin' version '1.7.0'
    id 'org.beryx.jlink' version '2.22.3'
}

repositories {
    jcenter()
    mavenCentral()
}

java {
    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
    withSourcesJar()
    withJavadocJar()
}

group = 'com.swardana'
version = '0.1-SNAPSHOT'

ext.isReleaseVersion = !version.endsWith("SNAPSHOT")

javafx {
    version = '15'
    modules = [ 'javafx.controls' ]
}

dependencies {
    implementation 'com.swardana:metroiconfx:1.0.0'
    implementation 'org.apache.logging.log4j:log4j-api:2.13.3'
    implementation 'org.apache.logging.log4j:log4j-core:2.13.3'
    testImplementation 'org.testfx:testfx-junit5:4.0.16-alpha'
    testImplementation 'org.junit.jupiter:junit-jupiter:5.6.2'
    testImplementation 'org.assertj:assertj-core:3.17.2'
}

test {
    useJUnitPlatform()
    moduleOptions {
        runOnClasspath = true
    }
}

jar {
    manifest {
        attributes(
            'Built-By': System.properties['user.name'],
            'Created-By': System.properties['java.version']
                + " (" + System.properties['java.vendor']
                + " " + System.properties['java.vm.version'] + ")",
            'Specification-Title': project.name,
            'Specification-Version': project.version,
            'Implementation-Title': project.name,
            'Implementation-Version': project.version
        )
    }
}

application {
    mainModule = 'com.swardana.ensia'
    mainClass = 'com.swardana.ensia.Bootstrap'
}

jlink {
    options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
    launcher{
        name = 'ensia'
    }
    forceMerge('log4j-api')
    jpackage {
        installerOptions += '--verbose'
    }
}

And here is the result executing ./gradlew -i jpackage that I though the source of problem:

Running [rpm, -q, --queryformat, %{name}\n, -q, --whatprovides, /usr/lib64/libgcc_s.so.1]
error: cannot open Name index using db4 - Permission denied (13)
error: cannot open Basenames index using db4 - Permission denied (13)
error: cannot open Providename index using db4 - Permission denied (13)
file /usr/lib64/libgcc_s.so.1 is not owned by any package
java.io.IOException: Command [rpm, -q, --queryformat, %{name}\n, -q, --whatprovides, /usr/lib64/libgcc_s.so.1] exited with 1 code
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.Executor.executeExpectSuccess(Executor.java:75)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LinuxRpmBundler.lambda$initLibProvidersLookup$7(LinuxRpmBundler.java:192)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LinuxRpmBundler$$Lambda$180/0x00000000cebce350.apply(Unknown Source)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LibProvidersLookup.lambda$execute$1(LibProvidersLookup.java:67)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LibProvidersLookup$$Lambda$194/0x00000000cebcf4c8.apply(Unknown Source)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
        at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1694)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:497)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:487)
        at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:239)
        at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LibProvidersLookup.execute(LibProvidersLookup.java:78)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LinuxPackageBundler.getListOfNeededPackages(LinuxPackageBundler.java:180)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LinuxPackageBundler.createDefaultReplacementData(LinuxPackageBundler.java:206)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LinuxPackageBundler.execute(LinuxPackageBundler.java:136)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.Arguments.generateBundle(Arguments.java:680)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.Arguments.processArguments(Arguments.java:549)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.main.Main.execute(Main.java:98)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.main.Main.main(Main.java:52)
Required packages: []
Using default package resource template.spec [RPM spec file] (add ensia.spec to the resource-dir to customize).
Running [rpmbuild, --eval=%{_target_cpu}]
x86_64
Generating RPM for installer to: /home/sukma/workspace/project/oss/ensia/build/jpackage.
Running [rpmbuild, -bb, /tmp/jdk.incubator.jpackage8539278251537235203/SPECS/ensia.spec, --define, %_sourcedir /tmp/jdk.incubator.jpackage8539278251537235203/images, --define, %_rpmdir /home/sukma/workspace/project/oss/ensia/build/jpackage, --define, %_topdir /tmp/jdk.incubator.jpackage8539278251537235203, --define, %_rpmfilename ensia-0.1-SNAPSHOT-1.x86_64.rpm]
error: line 3: Illegal char '-' in: Version: 0.1-SNAPSHOT
java.io.IOException: Command [rpmbuild, -bb, /tmp/jdk.incubator.jpackage8539278251537235203/SPECS/ensia.spec, --define, %_sourcedir /tmp/jdk.incubator.jpackage8539278251537235203/images, --define, %_rpmdir /home/sukma/workspace/project/oss/ensia/build/jpackage, --define, %_topdir /tmp/jdk.incubator.jpackage8539278251537235203, --define, %_rpmfilename ensia-0.1-SNAPSHOT-1.x86_64.rpm] exited with 1 code
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.Executor.executeExpectSuccess(Executor.java:75)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LinuxRpmBundler.buildRPM(LinuxRpmBundler.java:298)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LinuxRpmBundler.buildPackageBundle(LinuxRpmBundler.java:154)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LinuxPackageBundler.execute(LinuxPackageBundler.java:146)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.Arguments.generateBundle(Arguments.java:680)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.Arguments.processArguments(Arguments.java:549)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.main.Main.execute(Main.java:98)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.main.Main.main(Main.java:52)
jdk.incubator.jpackage.internal.PackagerException: java.io.IOException: Command [rpmbuild, -bb, /tmp/jdk.incubator.jpackage8539278251537235203/SPECS/ensia.spec, --define, %_sourcedir /tmp/jdk.incubator.jpackage8539278251537235203/images, --define, %_rpmdir /home/sukma/workspace/project/oss/ensia/build/jpackage, --define, %_topdir /tmp/jdk.incubator.jpackage8539278251537235203, --define, %_rpmfilename ensia-0.1-SNAPSHOT-1.x86_64.rpm] exited with 1 code
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LinuxPackageBundler.execute(LinuxPackageBundler.java:159)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.Arguments.generateBundle(Arguments.java:680)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.Arguments.processArguments(Arguments.java:549)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.main.Main.execute(Main.java:98)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.main.Main.main(Main.java:52)
Caused by: java.io.IOException: Command [rpmbuild, -bb, /tmp/jdk.incubator.jpackage8539278251537235203/SPECS/ensia.spec, --define, %_sourcedir /tmp/jdk.incubator.jpackage8539278251537235203/images, --define, %_rpmdir /home/sukma/workspace/project/oss/ensia/build/jpackage, --define, %_topdir /tmp/jdk.incubator.jpackage8539278251537235203, --define, %_rpmfilename ensia-0.1-SNAPSHOT-1.x86_64.rpm] exited with 1 code
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.Executor.executeExpectSuccess(Executor.java:75)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LinuxRpmBundler.buildRPM(LinuxRpmBundler.java:298)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LinuxRpmBundler.buildPackageBundle(LinuxRpmBundler.java:154)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LinuxPackageBundler.execute(LinuxPackageBundler.java:146)
        ... 4 more

I check that /usr/lib64/libgcc_s.so.1 is exists on my machine and have executable permission. My google-fu still don't give me clue about what is wrong, perhaps any one have encounter the same issue like mine?

swardana avatar Nov 20 '20 02:11 swardana

Try also adding this:

jlink {
    ...
    jpackage {
        ....
        installerOptions += ['--app-version', version.replace('-', '.')]
    }
}

siordache avatar Nov 20 '20 07:11 siordache

Ok, now my jlink setup was like below:

jlink {
    options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
    launcher{
        name = 'ensia'
    }
    forceMerge('log4j-api')
    jpackage {
        installerOptions += [
            '--verbose',
            '--app-version', version.replace('-', '.')
        ]
    }
}

But, I still get the same error and some additional error. The error is:

Running [rpm, -q, --queryformat, %{name}\n, -q, --whatprovides, /usr/lib64/libgcc_s.so.1]
error: cannot open Name index using db4 - Permission denied (13)
error: cannot open Basenames index using db4 - Permission denied (13)
error: cannot open Providename index using db4 - Permission denied (13)
file /usr/lib64/libgcc_s.so.1 is not owned by any package
java.io.IOException: Command [rpm, -q, --queryformat, %{name}\n, -q, --whatprovides, /usr/lib64/libgcc_s.so.1] exited with 1 code
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.Executor.executeExpectSuccess(Executor.java:75)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LinuxRpmBundler.lambda$initLibProvidersLookup$7(LinuxRpmBundler.java:192)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LinuxRpmBundler$$Lambda$180/0x000000001a188350.apply(Unknown Source)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LibProvidersLookup.lambda$execute$1(LibProvidersLookup.java:67)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LibProvidersLookup$$Lambda$194/0x000000001a1894c8.apply(Unknown Source)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
        at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1694)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:497)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:487)
        at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:239)
        at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LibProvidersLookup.execute(LibProvidersLookup.java:78)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LinuxPackageBundler.getListOfNeededPackages(LinuxPackageBundler.java:180)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LinuxPackageBundler.createDefaultReplacementData(LinuxPackageBundler.java:206)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LinuxPackageBundler.execute(LinuxPackageBundler.java:136)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.Arguments.generateBundle(Arguments.java:680)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.Arguments.processArguments(Arguments.java:549)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.main.Main.execute(Main.java:98)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.main.Main.main(Main.java:52)
Required packages: []
Using default package resource template.spec [RPM spec file] (add ensia.spec to the resource-dir to customize).
Running [rpmbuild, --eval=%{_target_cpu}]
x86_64
Generating RPM for installer to: /home/sukma/workspace/project/oss/ensia/build/jpackage.
Running [rpmbuild, -bb, /tmp/jdk.incubator.jpackage5930422271653150500/SPECS/ensia.spec, --define, %_sourcedir /tmp/jdk.incubator.jpackage5930422271653150500/images, --define, %_rpmdir /home/sukma/workspace/project/oss/ensia/build/jpackage, --define, %_topdir /tmp/jdk.incubator.jpackage5930422271653150500, --define, %_rpmfilename ensia-0.1.SNAPSHOT-1.x86_64.rpm]
error: cannot open Conflictname index using db4 - Permission denied (13)
error: cannot open Requirename index using db4 - Permission denied (13)
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.NOrYPu
+ umask 022
+ cd /tmp/jdk.incubator.jpackage5930422271653150500/BUILD
+ exit 0
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.KPxPDd
+ umask 022
+ cd /tmp/jdk.incubator.jpackage5930422271653150500/BUILD
+ exit 0
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.NdNksW
+ umask 022
+ cd /tmp/jdk.incubator.jpackage5930422271653150500/BUILD
+ rm -rf /tmp/jdk.incubator.jpackage5930422271653150500/BUILDROOT/ensia-0.1.SNAPSHOT-1.x86_64
+ install -d -m 755 /tmp/jdk.incubator.jpackage5930422271653150500/BUILDROOT/ensia-0.1.SNAPSHOT-1.x86_64/opt/ensia
+ cp -r /tmp/jdk.incubator.jpackage5930422271653150500/images/opt/ensia/bin /tmp/jdk.incubator.jpackage5930422271653150500/images/opt/ensia/lib /tmp/jdk.incubator.jpackage5930422271653150500/BUILDROOT/ensia-0.1.SNAPSHOT-1.x86_64/opt/ensia
+ cd /tmp/jdk.incubator.jpackage5930422271653150500/BUILDROOT/ensia-0.1.SNAPSHOT-1.x86_64
+ find . -type d
+ sed -e 's/^\.//' -e '/^$/d'
+ sort
+ rpm -ql filesystem
+ sort
error: cannot open Name index using db4 - Permission denied (13)
error: cannot open Name index using db4 - Permission denied (13)
+ echo / /opt /usr /usr/bin /usr/lib /usr/local /usr/local/bin /usr/local/lib
+ comm -23 /var/tmp/ensia.app.files /var/tmp/ensia.filesystem.files
+ sed -i -e 's/.*/%dir "&"/' /var/tmp/ensia.files
+ cd /tmp/jdk.incubator.jpackage5930422271653150500/BUILDROOT/ensia-0.1.SNAPSHOT-1.x86_64
+ sed -e 's/^\.//' -e 's/.*/"&"/'
+ find . -not -type d
+ /usr/lib/rpm/brp-compress
+ /usr/lib/rpm/brp-strip /usr/bin/strip
+ /usr/lib/rpm/brp-strip-static-archive /usr/bin/strip
+ /usr/lib/rpm/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
Processing files: ensia-0.1.SNAPSHOT-1.x86_64
Checking for unpackaged file(s): /usr/lib/rpm/check-files /tmp/jdk.incubator.jpackage5930422271653150500/BUILDROOT/ensia-0.1.SNAPSHOT-1.x86_64
Wrote: /home/sukma/workspace/project/oss/ensia/build/jpackage/ensia-0.1.SNAPSHOT-1.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.yTnHzM
+ umask 022
+ cd /tmp/jdk.incubator.jpackage5930422271653150500/BUILD
+ exit 0
Package (.rpm) saved to: /home/sukma/workspace/project/oss/ensia/build/jpackage.
Running [rpm, -qp, --queryformat, %{Name}\n%{Version}\n%{Release}\n%{Arch}, /home/sukma/workspace/project/oss/ensia/build/jpackage/ensia-0.1.SNAPSHOT-1.x86_64.rpm]
error: cannot open Name index using db4 - Permission denied (13)
ensia
0.1.SNAPSHOT
1
x86_64
Expected value of "Name" property is [ensia]. Actual value in output package is [error: cannot open Name index using db4 - Permission denied (13)]. Looks like custom "ensia.spec" file from resource directory contained hard coded value of "Name" property
Use [APPLICATION_PACKAGE] pattern string instead of hard coded value [error: cannot open Name index using db4 - Permission denied (13)] of Name property in custom "ensia.spec" file
Expected value of "Version" property is [0.1.SNAPSHOT]. Actual value in output package is [ensia]. Looks like custom "ensia.spec" file from resource directory contained hard coded value of "Version" property
Use [APPLICATION_VERSION] pattern string instead of hard coded value [ensia] of Version property in custom "ensia.spec" file
Expected value of "Release" property is [1]. Actual value in output package is [0.1.SNAPSHOT]. Looks like custom "ensia.spec" file from resource directory contained hard coded value of "Release" property
Use [APPLICATION_RELEASE] pattern string instead of hard coded value [0.1.SNAPSHOT] of Release property in custom "ensia.spec" file
Expected value of "Arch" property is [x86_64]. Actual value in output package is [1]. Looks like custom "ensia.spec" file from resource directory contained hard coded value of "Arch" property
Dont explicitly set value of {0} property in custom "{1}" file
Succeeded in building RPM Bundle package

Starting process 'command '/home/sukma/workspace/project/jdk-15.0.1+9/bin/jpackage''. Working directory: /home/sukma/workspace/project/oss/ensia Command: /home/sukma/workspace/project/jdk-15.0.1+9/bin/jpackage --type deb --dest /home/sukma/workspace/project/oss/ensia/build/jpackage --name ensia --app-version 0.1-SNAPSHOT --app-image /home/sukma/workspace/project/oss/ensia/build/jpackage/ensia --verbose --app-version 0.1.SNAPSHOT
Successfully started process 'command '/home/sukma/workspace/project/jdk-15.0.1+9/bin/jpackage''
WARNING: Using incubator modules: jdk.incubator.jpackage
Running [dpkg, --print-architecture]
Running [dpkg-deb, --version]
jdk.incubator.jpackage.internal.PackagerException: Error: Invalid or unsupported type: [deb]
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.Arguments.generateBundle(Arguments.java:674)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.Arguments.processArguments(Arguments.java:549)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.main.Main.execute(Main.java:98)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.main.Main.main(Main.java:52)

swardana avatar Nov 20 '20 07:11 swardana

Now add this:

jlink {
    ...
    jpackage {
        ....
         installerType = 'rpm'
    }
}

siordache avatar Nov 20 '20 07:11 siordache

Ok, so now my jlink configuration as below:

jlink {
    options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
    launcher{
        name = 'ensia'
    }
    forceMerge('log4j-api')
    jpackage {
        installerOptions += [
            '--verbose',
            '--app-version', version.replace('-', '.')
        ]
        installerType = 'rpm'
    }
}

Finally, the build is success and I could see the jpackage on my build directory. However, the logs showing result like this:

Running [rpm, -q, --queryformat, %{name}\n, -q, --whatprovides, /usr/lib64/libgcc_s.so.1]
error: cannot open Name index using db4 - Permission denied (13)
error: cannot open Basenames index using db4 - Permission denied (13)
error: cannot open Providename index using db4 - Permission denied (13)
file /usr/lib64/libgcc_s.so.1 is not owned by any package
java.io.IOException: Command [rpm, -q, --queryformat, %{name}\n, -q, --whatprovides, /usr/lib64/libgcc_s.so.1] exited with 1 code
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.Executor.executeExpectSuccess(Executor.java:75)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LinuxRpmBundler.lambda$initLibProvidersLookup$7(LinuxRpmBundler.java:192)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LinuxRpmBundler$$Lambda$180/0x00000000bc9af350.apply(Unknown Source)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LibProvidersLookup.lambda$execute$1(LibProvidersLookup.java:67)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LibProvidersLookup$$Lambda$194/0x00000000bc9b04c8.apply(Unknown Source)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
        at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1694)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:497)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:487)
        at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:239)
        at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LibProvidersLookup.execute(LibProvidersLookup.java:78)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LinuxPackageBundler.getListOfNeededPackages(LinuxPackageBundler.java:180)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LinuxPackageBundler.createDefaultReplacementData(LinuxPackageBundler.java:206)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.LinuxPackageBundler.execute(LinuxPackageBundler.java:136)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.Arguments.generateBundle(Arguments.java:680)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.internal.Arguments.processArguments(Arguments.java:549)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.main.Main.execute(Main.java:98)
        at jdk.incubator.jpackage/jdk.incubator.jpackage.main.Main.main(Main.java:52)
Required packages: []
Using default package resource template.spec [RPM spec file] (add ensia.spec to the resource-dir to customize).
Running [rpmbuild, --eval=%{_target_cpu}]
x86_64
Generating RPM for installer to: /home/sukma/workspace/project/oss/ensia/build/jpackage.
Running [rpmbuild, -bb, /tmp/jdk.incubator.jpackage12247423722424222773/SPECS/ensia.spec, --define, %_sourcedir /tmp/jdk.incubator.jpackage12247423722424222773/images, --define, %_rpmdir /home/sukma/workspace/project/oss/ensia/build/jpackage, --define, %_topdir /tmp/jdk.incubator.jpackage12247423722424222773, --define, %_rpmfilename ensia-0.1.SNAPSHOT-1.x86_64.rpm]
error: cannot open Conflictname index using db4 - Permission denied (13)
error: cannot open Requirename index using db4 - Permission denied (13)
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.Pazroj
+ umask 022
+ cd /tmp/jdk.incubator.jpackage12247423722424222773/BUILD
+ exit 0
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.K09SKo
+ umask 022
+ cd /tmp/jdk.incubator.jpackage12247423722424222773/BUILD
+ exit 0
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.SSlJ7t
+ umask 022
+ cd /tmp/jdk.incubator.jpackage12247423722424222773/BUILD
+ rm -rf /tmp/jdk.incubator.jpackage12247423722424222773/BUILDROOT/ensia-0.1.SNAPSHOT-1.x86_64
+ install -d -m 755 /tmp/jdk.incubator.jpackage12247423722424222773/BUILDROOT/ensia-0.1.SNAPSHOT-1.x86_64/opt/ensia
+ cp -r /tmp/jdk.incubator.jpackage12247423722424222773/images/opt/ensia/bin /tmp/jdk.incubator.jpackage12247423722424222773/images/opt/ensia/lib /tmp/jdk.incubator.jpackage12247423722424222773/BUILDROOT/ensia-0.1.SNAPSHOT-1.x86_64/opt/ensia
+ cd /tmp/jdk.incubator.jpackage12247423722424222773/BUILDROOT/ensia-0.1.SNAPSHOT-1.x86_64
+ sed -e 's/^\.//' -e '/^$/d'
+ find . -type d
+ sort
+ rpm -ql filesystem
+ sort
error: cannot open Name index using db4 - Permission denied (13)
error: cannot open Name index using db4 - Permission denied (13)
+ echo / /opt /usr /usr/bin /usr/lib /usr/local /usr/local/bin /usr/local/lib
+ comm -23 /var/tmp/ensia.app.files /var/tmp/ensia.filesystem.files
+ sed -i -e 's/.*/%dir "&"/' /var/tmp/ensia.files
+ cd /tmp/jdk.incubator.jpackage12247423722424222773/BUILDROOT/ensia-0.1.SNAPSHOT-1.x86_64
+ find . -not -type d
+ sed -e 's/^\.//' -e 's/.*/"&"/'
+ /usr/lib/rpm/brp-compress
+ /usr/lib/rpm/brp-strip /usr/bin/strip
+ /usr/lib/rpm/brp-strip-static-archive /usr/bin/strip
+ /usr/lib/rpm/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
Processing files: ensia-0.1.SNAPSHOT-1.x86_64
Checking for unpackaged file(s): /usr/lib/rpm/check-files /tmp/jdk.incubator.jpackage12247423722424222773/BUILDROOT/ensia-0.1.SNAPSHOT-1.x86_64
Wrote: /home/sukma/workspace/project/oss/ensia/build/jpackage/ensia-0.1.SNAPSHOT-1.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.Uh3vy5
+ umask 022
+ cd /tmp/jdk.incubator.jpackage12247423722424222773/BUILD
+ exit 0
Package (.rpm) saved to: /home/sukma/workspace/project/oss/ensia/build/jpackage.
Running [rpm, -qp, --queryformat, %{Name}\n%{Version}\n%{Release}\n%{Arch}, /home/sukma/workspace/project/oss/ensia/build/jpackage/ensia-0.1.SNAPSHOT-1.x86_64.rpm]
error: cannot open Name index using db4 - Permission denied (13)
ensia
0.1.SNAPSHOT
1
x86_64
Expected value of "Name" property is [ensia]. Actual value in output package is [error: cannot open Name index using db4 - Permission denied (13)]. Looks like custom "ensia.spec" file from resource directory contained hard coded value of "Name" property
Use [APPLICATION_PACKAGE] pattern string instead of hard coded value [error: cannot open Name index using db4 - Permission denied (13)] of Name property in custom "ensia.spec" file
Expected value of "Version" property is [0.1.SNAPSHOT]. Actual value in output package is [ensia]. Looks like custom "ensia.spec" file from resource directory contained hard coded value of "Version" property
Use [APPLICATION_VERSION] pattern string instead of hard coded value [ensia] of Version property in custom "ensia.spec" file
Expected value of "Release" property is [1]. Actual value in output package is [0.1.SNAPSHOT]. Looks like custom "ensia.spec" file from resource directory contained hard coded value of "Release" property
Use [APPLICATION_RELEASE] pattern string instead of hard coded value [0.1.SNAPSHOT] of Release property in custom "ensia.spec" file
Expected value of "Arch" property is [x86_64]. Actual value in output package is [1]. Looks like custom "ensia.spec" file from resource directory contained hard coded value of "Arch" property
Dont explicitly set value of {0} property in custom "{1}" file
Succeeded in building RPM Bundle package

:jpackage (Thread[Execution worker for ':' Thread 3,5,main]) completed. Took 16.134 secs.

BUILD SUCCESSFUL in 23s

Is there anything I should worried about my image?

swardana avatar Nov 20 '20 07:11 swardana

No need to worry. In verbose mode jpackage shows many warnings and errors but the relevant ones were:

error: line 3: Illegal char '-' in: Version: 0.1-SNAPSHOT

and then

jdk.incubator.jpackage.internal.PackagerException: Error: Invalid or unsupported type: [deb]

You can now remove the --verbose option from your build script.

siordache avatar Nov 20 '20 07:11 siordache

Thanks for the clarification. But, last question I think.

On the build/jpackage directory I saw the .rpm generated file and the directory, that I believe the raw content of .rpm file.

ensia
ensia-0.1.SNAPSHOT-1.x86_64.rpm

So, I tried to run the ensia/bin/ensia from my command line, but I got error

Failed to find JVM in "/home/sukma/workspace/project/oss/ensia/build/jpackage/ensia/lib/runtime" directory.

It's normal?

swardana avatar Nov 20 '20 08:11 swardana

That's not ok. Is the java executable available in ensia/lib/runtime/bin? Can you execute /home/sukma/workspace/project/oss/ensia/build/jpackage/ensia/lib/runtime/bin/java?

siordache avatar Nov 20 '20 08:11 siordache

I could execute the /home/sukma/workspace/project/oss/ensia/build/jpackage/ensia/lib/runtime/bin/java from my command line, did I missing something on my jlink setup?

swardana avatar Nov 20 '20 08:11 swardana

The jlink setup looks good. I don't know where the error message comes from. A google search for "Failed to find JVM in" returns no results. Is it possible that your Bootstrap class tries to find a JVM?

siordache avatar Nov 20 '20 09:11 siordache

No, actually my Bootstrap class don't have any code to find a JVM. Here is my Bootstrap class.

import com.swardana.ensia.gui.MainVisual;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

/**
 * The Bootstrap class.
 *
 * @author Sukma Wardana
 * @since 1.0.0
 */
public class Bootstrap extends Application {

    private static final Logger LOGGER = LogManager.getLogger(Bootstrap.class);

    @Override
    public void start(Stage stage) throws Exception {
        stage.setWidth(1024);
        stage.setHeight(768);
        stage.setTitle("Ensia 1.0-SNAPSHOT");

        LOGGER.info("Platform running");
        LOGGER.info("Launching Ensia 1.0-SNAPSHOT");

        Scene scene = new Scene(new MainVisual(stage), 640, 480);
        stage.setScene(scene);
        stage.show();
    }

}

I also tried to google it and couldn't find anything, perhaps it's not good to use Slackware to run this commands because when I tried it on MacOS it runs well without any issue.

swardana avatar Nov 20 '20 09:11 swardana

At this point I'm pretty sure there's nothing wrong with your application or jlink setup. I also suspect that this is a platform-specific issue, but I have no experience with Slackware. It would be interesting to see if you have similar problems on other *Nix platforms such as Ubuntu or CentOS.

Another thing that you may want to try is to run build/jpackage/ensia/bin/ensia with sudo.

siordache avatar Nov 20 '20 12:11 siordache

I'm experiencing a similiar problem. The image generated by jlink runs fine in standalone. Running jpackage the runtime runs fine too, but when I execute the generated started file from jpackage, it returns Failed to find JVM. This is the same on Debian testing, Windows 10 and MacOS Big sur. I'm using jpackage from jdk 15.

This seems to be a problem with jdk 15, using 14 it runs fine.

Burtan avatar Dec 13 '20 13:12 Burtan

It may be related to JDK-8255095, although this bug seems to affect only Windows systems.

siordache avatar Dec 21 '20 12:12 siordache

Anyone got it working with JDK16? My builds still fail.

Burtan avatar Jan 31 '21 18:01 Burtan

JDK 16 release still doesn't work on linux

Burtan avatar Apr 03 '21 17:04 Burtan

~Please execute:~

ls -al build/jpackage/<application-name>/lib/runtime/lib

~and post the output.~

EDIT: Ignore this post, see below.

siordache avatar Apr 03 '21 22:04 siordache

I strongly suspect that the error is caused by this bug, for which a fix has been submitted on March 4, 2021, and will be included in JDK 17.

For JDK 16, you can try the following workaround:

tasks.jpackageImage.doLast {
    copy {
        from "build/jpackage/$project.name/lib/runtime/lib/jli"
        include "libjli.so"
        into "build/jpackage/$project.name/lib/runtime/lib"
    }
}

siordache avatar Apr 04 '21 00:04 siordache

Thanks, the work around works, although $project.name should be $jpackageData.imageName

jpackageImage {
    doLast {
        copy {
            from("build/jpackage/${jpackageData.imageName}/lib/runtime/lib/jli")
            include("libjli.so")
            into("build/jpackage/${jpackageData.imageName}/lib/runtime/lib")
        }
    }
}

Burtan avatar Apr 04 '21 06:04 Burtan

You're right, it should be $jpackageData.imageName.

siordache avatar Apr 04 '21 10:04 siordache

It's working with openjdk-17 on debian for me

Burtan avatar Jul 02 '21 16:07 Burtan