badass-jlink-plugin
badass-jlink-plugin copied to clipboard
Task jpackage is failed
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
Add the --verbose
option 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.
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?
Try also adding this:
jlink {
...
jpackage {
....
installerOptions += ['--app-version', version.replace('-', '.')]
}
}
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)
Now add this:
jlink {
...
jpackage {
....
installerType = 'rpm'
}
}
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?
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.
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?
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
?
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?
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?
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.
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.
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.
It may be related to JDK-8255095, although this bug seems to affect only Windows systems.
Anyone got it working with JDK16? My builds still fail.
JDK 16 release still doesn't work on linux
~Please execute:~
ls -al build/jpackage/<application-name>/lib/runtime/lib
~and post the output.~
EDIT: Ignore this post, see below.
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"
}
}
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")
}
}
}
You're right, it should be $jpackageData.imageName
.
It's working with openjdk-17 on debian for me