Hi Hiran,
Thank you for providing all the details!
I can see two separate issues with jpackage:
1. jpackage reports NPE if it can't figure out the package name from
the supplied application image. It should issue a helpful error message
instead
2. jpackage fails to populate application image with Java runtime and
app specific files when executed in Github but exits with "0" status
indicating no error
jpackage will successfully build platform-specific packages from any
application image by design. It doesn't validate supplied application
image to let users create platform specific packages from customized
application images.
It is no surprise for me that after adding "--name" to jpackage command
line it worked. This supplied jpackage a package name that it would
normally get from non-empty application image.
The major problem in your use case is that jpackage doesn't create
correct application image. Instead, it creates only a directory
structure of application image, but no files and exits with a "success"
status code. This is quite strange. Is there any chance Gradle ignores
non-zero exit code from jpackage execution? Can you directly run
jpackage command creating application image in the environment where it
outputs "empty" application image and check its exit code (please add
"--verbose" to jpackage command line to get debug output)?
- Alexey
On 4/7/2022 3:38 PM, Hiran Chaudhuri wrote:
Hello Alex,
thank you for coming back. We now have four different cases just for
the second build step (appimage->deb). Let me first give you an
overview:
My Desktop (OpenJDK 16): My Command, Your command
Github (OpenJDK 17): My command, Your command
On Github I started using OpenJDK11, then switched to 16 and finally to
17. In respect to my build they all seem to behave the same. So I will
give the status on all four of the combinations. And btw I use Gradle
to trigger command lines which impacts a bit the log output but
otherwise should not matter.
--My Desktop, my command:--
Starting process 'command 'jpackage''. Working directory:
/home/hiran/NetBeansProjects/settlers-installer/app Command: jpackage
--app-image build/app-image/SettlersRemake --dest build/distributions
--resource-dir build/resources/jpackage
Successfully started process 'command 'jpackage''
:app:jpackagePhase2 (Thread[Execution worker for ':' Thread 3,5,main])
completed. Took 12.313 secs.
This one runs reliably. I was a bit annoyed that the appdir directory
is one level more than for build step 1 (input->appimage) - but maybe
that is exactly because I did not specify --name.
After all I have a Debian package that I can verify and install.
--My Desktop, your command--
Starting process 'command 'jpackage''. Working directory:
/home/hiran/NetBeansProjects/settlers-installer/app Command: jpackage
--app-image build/app-image/SettlersRemake --dest build/distributions
--resource-dir build/resources/jpackage
Successfully started process 'command 'jpackage''
:app:jpackagePhase2 (Thread[Execution worker for ':' Thread 3,5,main])
completed. Took 12.313 secs.
I added --name as you suggested. It seems I still need to specify the
application name on the app-image parameter otherwise the build will
fail. A bit strange since build step 1 was run with --dest build/app-
image.
I have not yet tested the Debian package yet.
--Github, my command--
In build step 1 I am running jpackage like so:
Starting process 'command 'jpackage''. Working directory:
/home/runner/work/settlers-installer/settlers-installer/app Command:
jpackage --type app-image --dest build/app-image -i
build/jpackage_input/app-0.1.0-SNAPSHOT/lib --main-jar app-0.1.0-
SNAPSHOT.jar --main-class settlers.installer.App --name SettlersRemake
--app-version 0.1.0-SNAPSHOT --description Settlers 3 remake - see
https://urldefense.com/v3/__https://github.com/__;!!ACWV5N9M2RV99hQ!csCrsY1mREmTYmH2eT2wnYjKhiYc2w5-kQMc9GrIoToruZ1Tz4GCYQ3O1a1_JKYyzRfj$
--vendor Hiran --icon
build/resources/main/siedler3-helme-logo.png --resource-dir
build/resources/jpackage
Successfully started process 'command 'jpackage''
:app:jpackagePhase1 (Thread[Daemon worker,5,main]) completed. Took
12.919 secs.
There is no error or any suspect message in stdout- Yet I investigated
and found out that the app-image directory is almost empty. This is a
problem for the second build step. And it is annoying that Gradle
garbles the output with other stuff so I hope to have it separated
correctly.
:app:jpackagePhase2 (Thread[Daemon worker,5,main]) started.
Bundler DEB Bundle failed because of java.lang.NullPointerException:
Cannot invoke "java.lang.CharSequence.length()" because "this.text" is
null
Task :app:jpackagePhase2 FAILED
* What went wrong:
Execution failed for task ':app:jpackagePhase2'.
Process 'command 'jpackage'' finished with non-zero exit value 1
Since gradle is not logging the command it invoked I will give you that
line from the build file:
commandLine 'jpackage', '--app-image', 'build/app-
image/SettlersRemake', '--dest', 'build', '--resource-dir',
'build/resources/jpackage'
--Github, your command--
Since you suggested to add --name on the second step, the first step
runs as it was before. And again most files are missing in the output.
Starting process 'command 'jpackage''. Working directory:
/home/runner/work/settlers-installer/settlers-installer/app Command: jpackage
--type app-image --dest build/app-image -i
build/jpackage_input/app-0.1.0-SNAPSHOT/lib --main-jar app-0.1.0-SNAPSHOT.jar
--main-class settlers.installer.App --name SettlersRemake --app-version
0.1.0-SNAPSHOT --description Settlers 3 remake - see
https://urldefense.com/v3/__https://github.com/__;!!ACWV5N9M2RV99hQ!csCrsY1mREmTYmH2eT2wnYjKhiYc2w5-kQMc9GrIoToruZ1Tz4GCYQ3O1a1_JKYyzRfj$
--vendor Hiran --icon build/resources/main/siedler3-helme-logo.png
--resource-dir build/resources/jpackage
Successfully started process 'command 'jpackage''
:app:jpackagePhase1 (Thread[Execution worker for ':',5,main]) completed. Took
12.672 secs.
To verify what files had been created I ran a 'find' afterwards. I had
expected the full application, and the JDK runtime. But I only see
these files for the appimage:
build/app-image
build/app-image/SettlersRemake
build/app-image/SettlersRemake/lib
build/app-image/SettlersRemake/bin
build/app-image/SettlersRemake/bin/SettlersRemake
With that, the second step is called and outputs this much:
Starting process 'command 'jpackage''. Working directory:
/home/runner/work/settlers-installer/settlers-installer/app Command:
jpackage --app-image build/app-image/SettlersRemake --name
SettlersRemake --dest build --resource-dir build/resources/jpackage
Successfully started process 'command 'jpackage''
Warning: app-image dir not generated by jpackage.
:app:jpackagePhase2 (Thread[Daemon worker,5,main]) completed. Took
8.099 secs.
I am surprised to see success, so my next step would be to evaluate the
content of the .deb file. I doubt jpackage would have created all what
was missing just now. However this evaluation will have to wait for a
week.
Hiran
On Thu, 2022-04-07 at 14:16 -0400, Alexey Semenyuk wrote:
Hi Hiran,
My apologies for not replying to your previous email. In that
particular
case the problem seems to be in missing "--name" cli option on the
second jpackage command line ($JAVA_HOME/bin/jpackage --app-image
build/app-image --verbose --dest build) that is supposed to build
.deb
package from the app image.
Could you please confirm this is the case so I can file more
specific
description in a CR tracking this issue.
Do you have a stack trace for the second NPE? It would help to
understand what went wrong.
Issue with the Github Runner looks similar to this one [1]
[1]
https://mail.openjdk.java.net/pipermail/core-libs-dev/2022-March/086656.html
- Alexey
On 4/7/2022 2:57 AM, Hiran Chaudhuri wrote:
Hi there.
I have another case where running jpackage emits
Bundler DEB Bundle failed because of
java.lang.NullPointerException:
Cannot invoke "java.lang.CharSequence.length()" because "this.text"
is
null
I have never experienced NullPointerExceptions in other JDK tools.
Seems to me JPackage is a new kid on the block. In this case,
JPackage
is invoked to finish from an existing appimage to the final
package.
the failure is caused because some important files are missing in
appimage.
The previous run is even more puzzling for me. It is supposed to
create
the appimage directory. And while it emits no error message, on my
development machine it runs reliably while on the Github Runner it
just
does not create all files - no error message, no exit code -
nothing.
Any idea what I could be looking at?
Hiran
On Mon, 2022-04-04 at 08:49 +0200, Hiran Chaudhuri wrote:
Hello Alex,
I tried running the same command with the jdk19 you pointed at.
As a
first, I get this output:
$JAVA_HOME/bin/jpackage --version
19-ea
With that, I invoked the command as before, and i fairly got the
same
output. So the behaviour in the latest version has not changed.
Two things I'd like to point out:
- there is no JPackage version in the output itself so both you
and
me
have to trust the correct one was called
- I found out the mistake: I should have used
--app-image build/app-image/SettlersRemake
but JPackage gave a warning in the beginning and processed all
the
rest
Hiran
$JAVA_HOME/bin/jpackage --app-image build/app-image --verbose --
dest
build
[08:41:58.675] Warning: app-image dir not generated by jpackage.
[08:41:58.688] Running dpkg
[08:41:58.696] Command [PID: 21712]:
dpkg --print-architecture
[08:41:58.696] Output:
amd64
[08:41:58.698] Returned: 0
[08:41:58.702] Running dpkg
[08:41:58.719] Command [PID: 21714]:
dpkg -s coreutils
[08:41:58.719] Output:
Package: coreutils
Essential: yes
Status: install ok installed
Priority: required
Section: utils
Installed-Size: 7196
Maintainer: Ubuntu Developers <
ubuntu-devel-disc...@lists.ubuntu.com>
Architecture: amd64
Multi-Arch: foreign
Version: 8.30-3ubuntu2
Pre-Depends: libacl1 (>= 2.2.23), libattr1 (>= 1:2.4.44),
libc6
(>=
2.28), libselinux1 (>= 2.1.13)
Description: GNU core utilities
This package contains the basic file, shell and text
manipulation
utilities which are expected to exist on every operating
system.
.
Specifically, this package includes:
arch base64 basename cat chcon chgrp chmod chown chroot
cksum
comm
cp
csplit cut date dd df dir dircolors dirname du echo env
expand
expr
factor false flock fmt fold groups head hostid id install
join
link ln
logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl
nohup
nproc
numfmt
od paste pathchk pinky pr printenv printf ptx pwd readlink
realpath rm
rmdir runcon sha*sum seq shred sleep sort split stat stty
sum
sync
tac
tail tee test timeout touch tr true truncate tsort tty
uname
unexpand
uniq unlink users vdir wc who whoami yes
Homepage:
https://urldefense.com/v3/__http://gnu.org/software/coreutils__;!!ACWV5N9M2RV99hQ!csCrsY1mREmTYmH2eT2wnYjKhiYc2w5-kQMc9GrIoToruZ1Tz4GCYQ3O1a1_JLa0gVuH$
Original-Maintainer: Michael Stone <mst...@debian.org>
[08:41:58.719] Returned: 0
[08:41:58.720] Running dpkg-deb
[08:41:58.722] Warning: app-image dir not generated by jpackage.
[08:41:58.723] Warning: app-image dir not generated by jpackage.
[08:41:58.723] java.lang.NullPointerException: Cannot invoke
"java.lang.CharSequence.length()" because "this.text" is null
at
java.base/java.util.regex.Matcher.getTextLength(Matcher.java:1769
)
at
java.base/java.util.regex.Matcher.reset(Matcher.java:415)
at
java.base/java.util.regex.Matcher.<init>(Matcher.java:252)
at
java.base/java.util.regex.Pattern.matcher(Pattern.java:1144)
at
jdk.jpackage/jdk.jpackage.internal.LinuxDebBundler.lambda$static$
1(Li
nu
xDebBundler.java:84)
at
jdk.jpackage/jdk.jpackage.internal.LinuxPackageBundler.validate(L
inux
Pa
ckageBundler.java:72)
at
jdk.jpackage/jdk.jpackage.internal.Arguments.generateBundle(Argum
ents
.j
ava:688)
at
jdk.jpackage/jdk.jpackage.internal.Arguments.processArguments(Arg
umen
ts
.java:561)
at
jdk.jpackage/jdk.jpackage.main.Main.execute(Main.java:91)
at
jdk.jpackage/jdk.jpackage.main.Main.main(Main.java:52)
[08:41:58.725] jdk.jpackage.internal.PackagerException: Bundler
DEB
Bundle failed because of java.lang.NullPointerException: Cannot
invoke
"java.lang.CharSequence.length()" because "this.text" is null
at
jdk.jpackage/jdk.jpackage.internal.Arguments.generateBundle(Argum
ents
.j
ava:710)
at
jdk.jpackage/jdk.jpackage.internal.Arguments.processArguments(Arg
umen
ts
.java:561)
at
jdk.jpackage/jdk.jpackage.main.Main.execute(Main.java:91)
at
jdk.jpackage/jdk.jpackage.main.Main.main(Main.java:52)
Caused by: java.lang.NullPointerException: Cannot invoke
"java.lang.CharSequence.length()" because "this.text" is null
at
java.base/java.util.regex.Matcher.getTextLength(Matcher.java:1769
)
at
java.base/java.util.regex.Matcher.reset(Matcher.java:415)
at
java.base/java.util.regex.Matcher.<init>(Matcher.java:252)
at
java.base/java.util.regex.Pattern.matcher(Pattern.java:1144)
at
jdk.jpackage/jdk.jpackage.internal.LinuxDebBundler.lambda$static$
1(Li
nu
xDebBundler.java:84)
at
jdk.jpackage/jdk.jpackage.internal.LinuxPackageBundler.validate(L
inux
Pa
ckageBundler.java:72)
at
jdk.jpackage/jdk.jpackage.internal.Arguments.generateBundle(Argum
ents
.j
ava:688)
... 3 more
On Fri, 2022-04-01 at 12:37 -0400, Alexey Semenyuk wrote:
Hi Hiran,
Looks like jpackage fails because of missing package name on
the
command
line.
I agree that the error message is not helpful. Can you try one
of
jdk19
EA builds [1] to see if the problem is reproducible?
[1]
https://urldefense.com/v3/__https://jdk.java.net/19/__;!!ACWV5N9M2RV99hQ!csCrsY1mREmTYmH2eT2wnYjKhiYc2w5-kQMc9GrIoToruZ1Tz4GCYQ3O1a1_JNgMRY6P$
- Alexey
On 4/1/2022 5:58 AM, Hiran Chaudhuri wrote:
Hello there.
While I am trying to package my project using jpackage 16.0.1
on
Ubuntu
20 LTS I have difficulty in assembling the correct commands.
The documentation covers a lot but not everything. For
example,
it
is
not clear to me when I have to provide an option - especially
since
I
meanwhile take a two step approach of building the appimage,
then
tweaking something (that could have done by JPackage
directly)
and
finally building the DEB package.
While I believe the documentation is good enough, the error
messages
presented by JPackage are not. Here is one example. Hopefully
you
agree
that the NullPointerException does not at all tell me what is
wrong
and
what I could improve on.
My feeling is that JPackage should do some better error
handling
and
come up with improved messages.
Hiran
$ jpackage --app-image build/app-image --verbose --dest build
[10:34:45.915] Warning: app-image dir not generated by
jpackage.
[10:34:45.930] Running dpkg
[10:34:45.937] Command:
dpkg --print-architecture
[10:34:45.937] Output:
amd64
[10:34:45.939] Returned: 0
[10:34:45.944] Running dpkg
[10:34:45.961] Command:
dpkg -s coreutils
[10:34:45.962] Output:
Package: coreutils
Essential: yes
Status: install ok installed
Priority: required
Section: utils
Installed-Size: 7196
Maintainer: Ubuntu Developers <
ubuntu-devel-disc...@lists.ubuntu.com>
Architecture: amd64
Multi-Arch: foreign
Version: 8.30-3ubuntu2
Pre-Depends: libacl1 (>= 2.2.23), libattr1 (>=
1:2.4.44),
libc6 (>=
2.28), libselinux1 (>= 2.1.13)
Description: GNU core utilities
This package contains the basic file, shell and text
manipulation
utilities which are expected to exist on every
operating
system.
.
Specifically, this package includes:
arch base64 basename cat chcon chgrp chmod chown
chroot
cksum
comm
cp
csplit cut date dd df dir dircolors dirname du echo
env
expand
expr
factor false flock fmt fold groups head hostid id
install
join
link ln
logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl
nohup
nproc
numfmt
od paste pathchk pinky pr printenv printf ptx pwd
readlink
realpath rm
rmdir runcon sha*sum seq shred sleep sort split stat
stty
sum
sync
tac
tail tee test timeout touch tr true truncate tsort tty
uname
unexpand
uniq unlink users vdir wc who whoami yes
Homepage:
https://urldefense.com/v3/__http://gnu.org/software/coreutils__;!!ACWV5N9M2RV99hQ!csCrsY1mREmTYmH2eT2wnYjKhiYc2w5-kQMc9GrIoToruZ1Tz4GCYQ3O1a1_JLa0gVuH$
Original-Maintainer: Michael Stone <mst...@debian.org>
[10:34:45.962] Returned: 0
[10:34:45.963] Running dpkg-deb
[10:34:45.965] Warning: app-image dir not generated by
jpackage.
[10:34:45.967] Warning: app-image dir not generated by
jpackage.
[10:34:45.967] java.lang.NullPointerException: Cannot invoke
"java.lang.CharSequence.length()" because "this.text" is null
at
java.base/java.util.regex.Matcher.getTextLength(Matcher.java:
1769
)
at
java.base/java.util.regex.Matcher.reset(Matcher.java:415)
at
java.base/java.util.regex.Matcher.<init>(Matcher.java:252)
at
java.base/java.util.regex.Pattern.matcher(Pattern.java:1134)
at
jdk.jpackage/jdk.jpackage.internal.LinuxDebBundler.lambda$sta
tic$
1(
Linu
xDebBundler.java:83)
at
jdk.jpackage/jdk.jpackage.internal.LinuxPackageBundler.valida
te(L
in
uxPa
ckageBundler.java:72)
at
jdk.jpackage/jdk.jpackage.internal.Arguments.generateBundle(A
rgum
en
ts.j
ava:663)
at
jdk.jpackage/jdk.jpackage.internal.Arguments.processArguments
(Arg
um
ents
.java:538)
at
jdk.jpackage/jdk.jpackage.main.Main.execute(Main.java:98)
at
jdk.jpackage/jdk.jpackage.main.Main.main(Main.java:52)
[10:34:45.969] jdk.jpackage.internal.PackagerException:
Bundler
DEB
Bundle failed because of java.lang.NullPointerException:
Cannot
invoke
"java.lang.CharSequence.length()" because "this.text" is null
at
jdk.jpackage/jdk.jpackage.internal.Arguments.generateBundle(A
rgum
en
ts.j
ava:685)
at
jdk.jpackage/jdk.jpackage.internal.Arguments.processArguments
(Arg
um
ents
.java:538)
at
jdk.jpackage/jdk.jpackage.main.Main.execute(Main.java:98)
at
jdk.jpackage/jdk.jpackage.main.Main.main(Main.java:52)
Caused by: java.lang.NullPointerException: Cannot invoke
"java.lang.CharSequence.length()" because "this.text" is null
at
java.base/java.util.regex.Matcher.getTextLength(Matcher.java:
1769
)
at
java.base/java.util.regex.Matcher.reset(Matcher.java:415)
at
java.base/java.util.regex.Matcher.<init>(Matcher.java:252)
at
java.base/java.util.regex.Pattern.matcher(Pattern.java:1134)
at
jdk.jpackage/jdk.jpackage.internal.LinuxDebBundler.lambda$sta
tic$
1(
Linu
xDebBundler.java:83)
at
jdk.jpackage/jdk.jpackage.internal.LinuxPackageBundler.valida
te(L
in
uxPa
ckageBundler.java:72)
at
jdk.jpackage/jdk.jpackage.internal.Arguments.generateBundle(A
rgum
en
ts.j
ava:663)
... 3 more
$