beryx / badass-jlink-plugin

Create a custom runtime image of your modular application
https://badass-jlink-plugin.beryx.org
Apache License 2.0
379 stars 25 forks source link

Task jpackage is failed #162

Closed swardana closed 1 year ago

swardana commented 3 years ago

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:

siordache commented 3 years ago

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.

swardana commented 3 years ago

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?

siordache commented 3 years ago

Try also adding this:

jlink {
    ...
    jpackage {
        ....
        installerOptions += ['--app-version', version.replace('-', '.')]
    }
}
swardana commented 3 years ago

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)
siordache commented 3 years ago

Now add this:

jlink {
    ...
    jpackage {
        ....
         installerType = 'rpm'
    }
}
swardana commented 3 years ago

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?

siordache commented 3 years ago

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.

swardana commented 3 years ago

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?

siordache commented 3 years ago

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?

swardana commented 3 years ago

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?

siordache commented 3 years ago

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?

swardana commented 3 years ago

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.

siordache commented 3 years ago

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.

Burtan commented 3 years ago

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.

siordache commented 3 years ago

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

Burtan commented 3 years ago

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

Burtan commented 3 years ago

JDK 16 release still doesn't work on linux

siordache commented 3 years ago

~Please execute:~

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

~and post the output.~

EDIT: Ignore this post, see below.

siordache commented 3 years ago

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"
    }
}
Burtan commented 3 years ago

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")
        }
    }
}
siordache commented 3 years ago

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

Burtan commented 3 years ago

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