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