jlink tool doesn't create windows os compatible launcher in resulting runtime image
Ali Ebrahimi
ali.ebrahimi1781 at gmail.com
Thu Sep 17 10:23:13 UTC 2015
Hi,
This is clean and tested patch:
diff --git
a/src/jdk.jlink/share/classes/jdk/tools/jlink/plugins/DefaultImageBuilder.java
b/src/jdk.jlink/share/classes/jdk/tools/jlink/plugins/DefaultImageBuilder.java
---
a/src/jdk.jlink/share/classes/jdk/tools/jlink/plugins/DefaultImageBuilder.java
+++
b/src/jdk.jlink/share/classes/jdk/tools/jlink/plugins/DefaultImageBuilder.java
@@ -172,17 +172,24 @@
ByteArrayInputStream stream = new
ByteArrayInputStream(res.getByteArray());
mainClass = ModuleDescriptor.read(stream).mainClass();
if (mainClass.isPresent()) {
- Path cmd = root.resolve("bin").resolve(module);
+ Path cmd = root.resolve("bin").resolve(isWindows()?
module+".bat": module);
if (!Files.exists(cmd)) {
StringBuilder sb = new StringBuilder();
- sb.append("#!/bin/sh")
- .append("\n");
- sb.append("DIR=`dirname $0`")
- .append("\n");
- sb.append("$DIR/java -m ")
- .append(module).append('/')
- .append(mainClass.get())
- .append(" $@\n");
+ if(!isWindows()) {
+ sb.append("#!/bin/sh")
+ .append("\n");
+ sb.append("DIR=`dirname $0`")
+ .append("\n");
+ sb.append("$DIR/java -m ")
+ .append(module).append('/')
+ .append(mainClass.get())
+ .append(" $@\n");
+ } else {
+ sb.append("%~dp0java -m ")
+ .append(module).append('/')
+ .append(mainClass.get())
+ .append(" %*\n");
+ }
try (BufferedWriter writer =
Files.newBufferedWriter(cmd,
StandardCharsets.ISO_8859_1,
On Wed, Sep 16, 2015 at 8:46 PM, Jean-Francois Denise <
jean-francois.denise at oracle.com> wrote:
> Hi Ali,
> I logged: https://bugs.openjdk.java.net/browse/JDK-8136645
> Thanks for reporting.
> JF
>
> On 16 Sep 2015, at 17:55, Ali Ebrahimi <ali.ebrahimi1781 at gmail.com> wrote:
>
> > Hi,
> >
> > The following patch tries to fix this:
> >
> > diff --git
> >
> a/src/jdk.jlink/share/classes/jdk/tools/jlink/plugins/DefaultImageBuilder.java
> >
> b/src/jdk.jlink/share/classes/jdk/tools/jlink/plugins/DefaultImageBuilder.java
> > ---
> >
> a/src/jdk.jlink/share/classes/jdk/tools/jlink/plugins/DefaultImageBuilder.java
> > +++
> >
> b/src/jdk.jlink/share/classes/jdk/tools/jlink/plugins/DefaultImageBuilder.java
> > @@ -172,17 +172,24 @@
> > ByteArrayInputStream stream = new
> > ByteArrayInputStream(res.getByteArray());
> > mainClass = ModuleDescriptor.read(stream).mainClass();
> > if (mainClass.isPresent()) {
> > - Path cmd = root.resolve("bin").resolve(module);
> > + Path cmd = root.resolve("bin").resolve(isWindows()?
> > module+".bat": module);
> > if (!Files.exists(cmd)) {
> > StringBuilder sb = new StringBuilder();
> > - sb.append("#!/bin/sh")
> > + if(!isWindows())
> > + sb.append("#!/bin/sh")
> > + .append("\n");
> > + sb.append("DIR=`dirname $0`")
> > .append("\n");
> > - sb.append("DIR=`dirname $0`")
> > - .append("\n");
> > - sb.append("$DIR/java -m ")
> > + sb.append("$DIR/java -m ")
> > .append(module).append('/')
> > .append(mainClass.get())
> > .append(" $@\n");
> > + } else {
> > + sb.append("%~dp0java -m ")
> > + .append(module).append('/')
> > + .append(mainClass.get())
> > + .append(" $*\n");
> > + }
> >
> >
> > Best Regards,
> > Ali Ebrahimi
>
>
--
Best Regards,
Ali Ebrahimi
More information about the jigsaw-dev
mailing list