<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent changes to bugs</title><link href="https://sourceforge.net/p/launch4j/bugs/" rel="alternate"/><link href="https://sourceforge.net/p/launch4j/bugs/feed.atom" rel="self"/><id>https://sourceforge.net/p/launch4j/bugs/</id><updated>2025-10-26T08:02:36.282000Z</updated><subtitle>Recent changes to bugs</subtitle><entry><title>#241 Java 25 is not detected</title><link href="https://sourceforge.net/p/launch4j/bugs/241/?limit=25#5548" rel="alternate"/><published>2025-10-26T08:02:36.282000Z</published><updated>2025-10-26T08:02:36.282000Z</updated><author><name>MichaeL</name><uri>https://sourceforge.net/u/derletztekick/</uri></author><id>https://sourceforge.net8b08f197b34162bf3806949435ffafa7d97cc21c</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;FYI: The version 25.0.1 is correctly detected.  Perhaps it is just a problem with the comparison operator "greater than" or "greater than or equal to".&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Java 25 is not detected</title><link href="https://sourceforge.net/p/launch4j/bugs/241/" rel="alternate"/><published>2025-09-29T12:28:19.639000Z</published><updated>2025-09-29T12:28:19.639000Z</updated><author><name>MichaeL</name><uri>https://sourceforge.net/u/derletztekick/</uri></author><id>https://sourceforge.neta8bb9a0b476c907a7d605f84a6bef66afc324799</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;there appears to be a problem detecting Java version 25. If the current version 25.0.0 is specified as the minimum version, the application will not start. The log file reads:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;Version&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mf"&gt;3.50&lt;/span&gt;
&lt;span class="n"&gt;CmdLine&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="o"&gt;:\&lt;/span&gt;&lt;span class="mi"&gt;02&lt;/span&gt;&lt;span class="n"&gt;_JAG3D&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="mi"&gt;01&lt;/span&gt;&lt;span class="n"&gt;_JAG3DvFX&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;JAG3Dv20250829&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;JAG3Dv20250829_Windows&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;jag3d&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;l4j&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;debug&lt;/span&gt;
&lt;span class="n"&gt;JNI&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;No&lt;/span&gt;
&lt;span class="n"&gt;WOW64&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;Yes&lt;/span&gt;
&lt;span class="n"&gt;Working&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dir&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="o"&gt;:\&lt;/span&gt;&lt;span class="mi"&gt;02&lt;/span&gt;&lt;span class="n"&gt;_JAG3D&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="mi"&gt;01&lt;/span&gt;&lt;span class="n"&gt;_JAG3DvFX&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;JAG3Dv20250829&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;JAG3Dv20250829_Windows&lt;/span&gt;&lt;span class="o"&gt;\.&lt;/span&gt;
&lt;span class="n"&gt;Requires&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;JDK&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;No&lt;/span&gt;
&lt;span class="n"&gt;Requires&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Bit&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Yes&lt;/span&gt;
&lt;span class="n"&gt;Java&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;min&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ver&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mf"&gt;1.025&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;000&lt;/span&gt;&lt;span class="n"&gt;_000&lt;/span&gt;
&lt;span class="n"&gt;Java&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ver&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;
&lt;span class="n"&gt;JRE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paths&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;openjdk&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;
&lt;span class="n"&gt;Check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;launcher&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="o"&gt;:\&lt;/span&gt;&lt;span class="mi"&gt;02&lt;/span&gt;&lt;span class="n"&gt;_JAG3D&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="mi"&gt;01&lt;/span&gt;&lt;span class="n"&gt;_JAG3DvFX&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;JAG3Dv20250829&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;JAG3Dv20250829_Windows&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;openjdk&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;javaw&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OK&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Version&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.025&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Ignore&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;SOFTWARE&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;JavaSoft&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Java&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Runtime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;SOFTWARE&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;JavaSoft&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Java&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Development&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Kit&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;SOFTWARE&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;JavaSoft&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;JRE&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;SOFTWARE&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;JavaSoft&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;JDK&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;Check&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;SOFTWARE&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;JavaSoft&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;JDK&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;
&lt;span class="n"&gt;Version&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.025&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Ignore&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Ignore&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mf"&gt;1.025&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;000&lt;/span&gt;
&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;SOFTWARE&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;IBM&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Java&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Runtime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;SOFTWARE&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;IBM&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Java&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Development&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Kit&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;SOFTWARE&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;IBM&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Java2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Runtime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;SOFTWARE&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;IBM&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Java&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Development&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Kit&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;Error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;This&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;application&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;requires&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Java&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Runtime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Environment&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;25.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Error&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;Die&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Pipe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wurde&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;beendet&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Reagds&lt;br/&gt;
Micha&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>`ld` does not find the header objects and libraries when they are not relative to the JAR file</title><link href="https://sourceforge.net/p/launch4j/bugs/240/" rel="alternate"/><published>2025-08-01T12:40:47.712000Z</published><updated>2025-08-01T12:40:47.712000Z</updated><author><name>Björn Kautler</name><uri>https://sourceforge.net/u/vampire0/</uri></author><id>https://sourceforge.net5e699f41c5c268b7dd2e6cd890f3c56f2dee7e1c</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;I have a Gradle task that executes Launch4j.&lt;br/&gt;
I use the Ant integration in Gralde for that.&lt;br/&gt;
I'd like to use the Launch4j and dependency JAR files directly from the Gradle dependencies cache.&lt;br/&gt;
For this I unpack the respective workdir artifact and set the &lt;code&gt;launch4j.bindir&lt;/code&gt; system property so that &lt;code&gt;windres&lt;/code&gt; and &lt;code&gt;ld&lt;/code&gt; are found in that unpacked directory while the Launch4j jar is used from the original location.&lt;/p&gt;
&lt;p&gt;The problem is, that this only affects where &lt;code&gt;windres&lt;/code&gt; and &lt;code&gt;ld&lt;/code&gt; are searched in. The &lt;code&gt;windres&lt;/code&gt; call succeeds, but then the &lt;code&gt;ld&lt;/code&gt; call fails as it given the header and library files relative to the jar containing the &lt;code&gt;Util&lt;/code&gt; class still.&lt;/p&gt;
&lt;p&gt;It would be nice if this could work somehow.&lt;br/&gt;
For example by specifying also that directory, or by being able to configure the whole basedir instead of the bindir.&lt;br/&gt;
&lt;code&gt;Builder&lt;/code&gt; has a constructor that accepts a whole basedir, but it is used nowhere in the source code.&lt;/p&gt;
&lt;p&gt;So I'd like to ask for a way to configure the basedir when calling the Ant task so that not only the executable, but also the header and library files are taken from there.&lt;/p&gt;
&lt;p&gt;Please consider to make this an Ant task property (and also &lt;code&gt;bindir&lt;/code&gt;) and &lt;strong&gt;not&lt;/strong&gt; a System property (or additionally). If you use Launch4j from within another software, like the Gradle daemon and maybe even run things in parallel, using system properties is always building a race condition.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>#190 Dual-signing sometimes result in a corrupted jar file error</title><link href="https://sourceforge.net/p/launch4j/bugs/190/?limit=25#45da" rel="alternate"/><published>2025-06-26T17:56:36.112000Z</published><updated>2025-06-26T17:56:36.112000Z</updated><author><name>David Tuma</name><uri>https://sourceforge.net/u/tuma/</uri></author><id>https://sourceforge.net869d1d9e9e8eb2ccadad3ec44889bf756d38845c</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;After testing, I was able to verify the root cause I suspected earlier: the size of the appended signature can change from one run to the next. Timestamping could be a contributing factor.&lt;/p&gt;
&lt;p&gt;Fortunately, the size isn't completely unstable; it usually differs by a few bytes, and toggles between two (or occasionally three) possibilities. This makes it feasible to produce a successful signature by iterating until the sizes match in two consecutive runs.&lt;/p&gt;
&lt;p&gt;I took a look at modifying the original sign4j.c program, but C isn't my forte. Since all users of launch4j are Java developers anyway, I wrote a Java version of the sign4j utility that includes a fix for this bug. I took care to make sure I was command-line compatible with the original C version, so it works as a drop-in replacement. I also added an Ant task. I've published it here: &lt;a href="https://github.com/dtuma/sign4j-java" rel="nofollow"&gt;https://github.com/dtuma/sign4j-java&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>#190 Dual-signing sometimes result in a corrupted jar file error</title><link href="https://sourceforge.net/p/launch4j/bugs/190/?limit=25#6df7" rel="alternate"/><published>2025-06-09T21:33:30.410000Z</published><updated>2025-06-09T21:33:30.410000Z</updated><author><name>David Tuma</name><uri>https://sourceforge.net/u/tuma/</uri></author><id>https://sourceforge.nete5f6ace4a00bf21e99ecd87730f028410abc3cd4</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;I've been experiencing this too. Unfortunately it is nondeterministic; sometimes it works and sometimes it doesn't. When it works the file is signed successfully; when it doesn't, running the EXE results in an error message "Invalid or corrupt jarfile" from the launched javaw.exe process. Nothing in my build process changes; I can run the build again, and it might work the next time or it might not. Overall my success rate is only about 50%.&lt;/p&gt;
&lt;p&gt;The worst problem is that I can't detect this failure in my build process. The sign4j step completes successfully and returns a 0 exit code. I have to go back at the end of the build and manually run all the EXEs that were generated to see if they are corrupt. Then resign the corrupt files again, manually repeating and testing in a loop, until I get a version that isn't corrupt.&lt;/p&gt;
&lt;p&gt;I'm using jsign version 7.0 (not the 2.0 version bundled in launch4j) because I needed support for Azure Trusted Signing. If it helps, I can share a copy of the unsigned exe that launch4j produced (which works fine) along with corrupt and successful versions produced by sign4j.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>With empty classpath process cannot start</title><link href="https://sourceforge.net/p/launch4j/bugs/239/" rel="alternate"/><published>2025-06-03T18:24:23.734000Z</published><updated>2025-06-03T18:24:23.734000Z</updated><author><name>Björn Kautler</name><uri>https://sourceforge.net/u/vampire0/</uri></author><id>https://sourceforge.net3bdb48418e8a4f0f77cab1caecffb737adb43c80</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;When not specifying a classpath, or when specifying a pattern like &lt;code&gt;lib/*.jar&lt;/code&gt; and it does not find any matches, the built commandline contains the &lt;code&gt;-classpath&lt;/code&gt; parameter with a single double-quote as argument which fails to start.&lt;/p&gt;
&lt;p&gt;As a work-around, a dummy entry that does not contain wildcards can be specified as non-existing classpath entries are ignored by the JRE as per the Java spec.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>The standard classpath wildcard should not get expanded</title><link href="https://sourceforge.net/p/launch4j/bugs/238/" rel="alternate"/><published>2025-06-03T17:51:07.975000Z</published><updated>2025-06-03T17:51:07.975000Z</updated><author><name>Björn Kautler</name><uri>https://sourceforge.net/u/vampire0/</uri></author><id>https://sourceforge.netc66954ca4ed50884e12c9ca2af6ce809e836341d</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;If you specify in the l4j configuration as classpath &lt;code&gt;lib/*&lt;/code&gt;, l4j expands this to all entries in the directory, including &lt;code&gt;.&lt;/code&gt; and &lt;code&gt;..&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If you give &lt;code&gt;lib/*&lt;/code&gt; as classpath entry to the Java process, this means "all jars in that directory".&lt;/p&gt;
&lt;p&gt;IF the filename only consists of the standard Java wildcard &lt;code&gt;*&lt;/code&gt;, this should not get expanded, but forwarded as-is to the Java process.&lt;/p&gt;
&lt;p&gt;Besides being unexpected as it puts things on the classpath it shouldn't put there, this also has a practical consequence. With non-exe means to start an application, like a batch script, it happens that the commandline becomes too long for Windows if you list each jar manually, which can be prevented by either using an @-file if the JRE supports it, or by using the wildcard if you don't depend on the classpath order which is bad anyway.&lt;/p&gt;
&lt;p&gt;I don't know whether l4j has measures for too long command lines like using an @-file or similar, or whether it does anyway not have that problem no matter how long the commanline becomes, but it imho is wrong to expand this standard-wildcard.&lt;/p&gt;
&lt;p&gt;The work-around to get expected behavior is to use &lt;code&gt;.../*.jar&lt;/code&gt; instead of &lt;code&gt;.../*&lt;/code&gt; as long as the length limit does not get hit.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>#237 Ticket 232 (JAVA_TOOLS_OPTIONS bug) was not properly fixed nor was it closed</title><link href="https://sourceforge.net/p/launch4j/bugs/237/?limit=25#5e56" rel="alternate"/><published>2024-12-20T16:24:54.424000Z</published><updated>2024-12-20T16:24:54.424000Z</updated><author><name>Jeffrey Holt</name><uri>https://sourceforge.net/u/jeff6times7/</uri></author><id>https://sourceforge.net83c63d333f94c75a13562faf7aa08a392fa99e25</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;After my tests, I think there is a java for windows bug that manifests only when JNI_CreateJavaVM. I think a reasonable workaround for the bug is to strip bounding characters (if they're used) before calling JNI_CreateJavaVM in jnihead.c.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Ticket 232 (JAVA_TOOLS_OPTIONS bug) was not properly fixed nor was it closed</title><link href="https://sourceforge.net/p/launch4j/bugs/237/" rel="alternate"/><published>2024-12-20T15:41:00.576000Z</published><updated>2024-12-20T15:41:00.576000Z</updated><author><name>Jeffrey Holt</name><uri>https://sourceforge.net/u/jeff6times7/</uri></author><id>https://sourceforge.net7b15ee7f5ddc41d74396424d80d3436940c23dde</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Ticket 232 describes a problem with interpreting the environment variable JAVA_TOOLS_OPTIONS. It describes how version 3.5 abnormally terminates if the variable's value is bounded by the apostrophe character. In 3.50, presently the latest version, using the apostrophe character works as a bounding character.&lt;/p&gt;
&lt;p&gt;However, the obvious bounding character, the quote, is a problem. Perhaps, it was a problem in 3.5 but nobody properly tested that version.&lt;/p&gt;
&lt;p&gt;At any rate, the launcher terminates without any fanfare. I can't tell from the lauch4j.log file if it launched the jvm and the jvm died or if it died after writing a seemingly normal log file.&lt;/p&gt;
&lt;p&gt;But I do know that if I set JAVA_TOOLS_OPTIONS and run a hello world from a java 21 command line that the JVM has no problem printing the "Picked up ..." message whether. So the problem has to be somewhere in the launcher.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>#232 3.5 crash with JAVA_TOOL_OPTIONS containing quotes</title><link href="https://sourceforge.net/p/launch4j/bugs/232/?limit=25#2ef8" rel="alternate"/><published>2024-12-20T15:32:45.568000Z</published><updated>2024-12-20T15:32:45.568000Z</updated><author><name>Jeffrey Holt</name><uri>https://sourceforge.net/u/jeff6times7/</uri></author><id>https://sourceforge.net28e6a24c23ea66a1181883abd82b398c581855fb</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;With version 3.50, I have no problem if apostrophes are used but I do have a problem with quotes are used. Of course, neither apostrophes nor quotes are necessary but some people don't care.&lt;/p&gt;
&lt;p&gt;These work in 3.50&lt;br/&gt;
set JAVA_TOOL_OPTIONS='something in the way'&lt;/p&gt;
&lt;p&gt;This also works in 3.50 but it's DOS insanity&lt;br/&gt;
set JAVA_TOOL_OPTIONS=something in the way&lt;/p&gt;
&lt;p&gt;This does not work in 3.50&lt;br/&gt;
set JAVA_TOOL_OPTIONS="something in the way"&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>