Skip to content

Commit ebdafd6

Browse files
committed
First pass at Why support
1 parent e05dcca commit ebdafd6

File tree

7 files changed

+102
-11
lines changed

7 files changed

+102
-11
lines changed

src/main/java/io/github/fvarrui/javapackager/gradle/GradleContext.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.io.File;
44

5+
import io.github.fvarrui.javapackager.packagers.*;
56
import org.gradle.api.Project;
67
import org.gradle.api.internal.provider.Providers;
78
import org.gradle.api.logging.Logger;
@@ -12,11 +13,6 @@
1213
import org.gradle.jvm.toolchain.JavaToolchainSpec;
1314

1415
import edu.sc.seis.launch4j.tasks.Launch4jLibraryTask;
15-
import io.github.fvarrui.javapackager.packagers.AbstractCreateWindowsExe;
16-
import io.github.fvarrui.javapackager.packagers.Context;
17-
import io.github.fvarrui.javapackager.packagers.CreateWindowsExeWinRun4j;
18-
import io.github.fvarrui.javapackager.packagers.Packager;
19-
import io.github.fvarrui.javapackager.packagers.WindowsPackager;
2016

2117
/**
2218
* Gradle context
@@ -118,6 +114,7 @@ public File createWindowsExe(WindowsPackager packager) throws Exception {
118114
switch (packager.getWinConfig().getExeCreationTool()) {
119115
case launch4j: createWindowsExe = new CreateWindowsExeLaunch4j(); break;
120116
case winrun4j: createWindowsExe = new CreateWindowsExeWinRun4j(); break;
117+
case why: createWindowsExe = new CreateWindowsExeWhy(); break;
121118
default: return null;
122119
}
123120
if (!createWindowsExe.skip(packager)) {

src/main/java/io/github/fvarrui/javapackager/maven/MavenContext.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,10 @@
22

33
import java.io.File;
44

5+
import io.github.fvarrui.javapackager.packagers.*;
56
import org.apache.maven.plugin.logging.Log;
67
import org.twdata.maven.mojoexecutor.MojoExecutor.ExecutionEnvironment;
78

8-
import io.github.fvarrui.javapackager.packagers.AbstractCreateWindowsExe;
9-
import io.github.fvarrui.javapackager.packagers.Context;
10-
import io.github.fvarrui.javapackager.packagers.CreateWindowsExeWinRun4j;
11-
import io.github.fvarrui.javapackager.packagers.Packager;
12-
import io.github.fvarrui.javapackager.packagers.WindowsPackager;
13-
149
/**
1510
* Maven context
1611
*/
@@ -73,6 +68,7 @@ public File createWindowsExe(WindowsPackager packager) throws Exception {
7368
AbstractCreateWindowsExe createWindowsExe;
7469
switch (packager.getWinConfig().getExeCreationTool()) {
7570
case launch4j: createWindowsExe = new CreateWindowsExeLaunch4j(); break;
71+
case why: createWindowsExe = new CreateWindowsExeWhy(); break;
7672
case winrun4j: createWindowsExe = new CreateWindowsExeWinRun4j(); break;
7773
default: return null;
7874
}

src/main/java/io/github/fvarrui/javapackager/model/WindowsExeCreationTool.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@
22

33
public enum WindowsExeCreationTool {
44
launch4j,
5+
why,
56
winrun4j;
67
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package io.github.fvarrui.javapackager.packagers;
2+
3+
import io.github.fvarrui.javapackager.model.Platform;
4+
import io.github.fvarrui.javapackager.utils.*;
5+
6+
import java.io.File;
7+
import java.io.FileOutputStream;
8+
import java.util.Properties;
9+
10+
/**
11+
* Creates Windows executable with WinRun4j
12+
*/
13+
public class CreateWindowsExeWhy extends AbstractCreateWindowsExe {
14+
15+
public CreateWindowsExeWhy() {
16+
super("why");
17+
}
18+
19+
@Override
20+
public boolean skip(WindowsPackager packager) {
21+
22+
if (!packager.getPlatform().isCurrentPlatform()) {
23+
Logger.error(getArtifactName() + " cannot be generated with Why due to the target platform (" + packager.getPlatform() + ") is different from the execution platform (" + Platform.getCurrentPlatform() + ")!");
24+
return true;
25+
}
26+
27+
return false;
28+
}
29+
30+
@Override
31+
protected File doApply(WindowsPackager packager) throws Exception {
32+
33+
File executable = packager.getExecutable();
34+
File manifestFile = packager.getManifestFile();
35+
File iconFile = packager.getIconFile();
36+
File appFolder = packager.getAppFolder();
37+
38+
createAssets(packager);
39+
40+
// creates generic manifest
41+
FileUtils.copyFileToFile(manifestFile, getGenericManifest());
42+
43+
// creates generic manifest
44+
FileUtils.copyFileToFile(iconFile, getGenericIcon());
45+
46+
// creates generic exe
47+
FileUtils.copyResourceToFile("/windows/JavaLauncher.exe", getGenericExe());
48+
49+
// copies rcedit command line tool (needed to manipulate exe)
50+
File rcedit = new File(getOutputFolder(), "rcedit.exe");
51+
FileUtils.copyResourceToFile("/windows/rcedit-x64.exe", rcedit);
52+
53+
// generates ini file
54+
File genericIni = new File(getOutputFolder(), "launcher.ini");
55+
VelocityUtils.render("windows/why-ini.vtl", genericIni, packager);
56+
Logger.info("INI file generated in " + genericIni.getAbsolutePath() + "!");
57+
58+
// process EXE with rcedit-x64.exe
59+
CommandUtils.execute(rcedit.getAbsolutePath(), getGenericExe(), "--set-icon", getGenericIcon());
60+
CommandUtils.execute(rcedit.getAbsolutePath(), getGenericExe(), "--application-manifest", getGenericManifest());
61+
62+
// generates why properties
63+
/*File propertiesFile = new File(getOutputFolder(), "launcher.ini");
64+
Properties properties = new Properties();
65+
properties.setProperty("mainclass", mainClass);
66+
properties.store(new FileOutputStream(propertiesFile), "Why Java Launcher Properties");*/
67+
68+
// copies ini file to app folder
69+
File iniFile = new File(appFolder, "launcher.ini");
70+
FileUtils.copyFileToFile(genericIni, iniFile);
71+
72+
// signs generated exe file
73+
sign(getGenericExe(), packager);
74+
75+
// copies exe file to app folder with apps name
76+
FileUtils.copyFileToFile(getGenericExe(), executable);
77+
78+
return createBootstrapScript(packager);
79+
}
80+
81+
}

src/main/java/io/github/fvarrui/javapackager/packagers/Packager.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ public File getJarFile() {
6262
return jarFile;
6363
}
6464

65+
public String getJarName() {
66+
return jarFile.getName();
67+
}
68+
6569
public File getJarFileDestinationFolder() {
6670
return jarFileDestinationFolder;
6771
}
725 KB
Binary file not shown.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
mainclass=$info.mainClass
2+
classpath=$info.jarName
3+
#foreach ($cp in $info.classpaths)
4+
classpath=;$!{cp}
5+
#end
6+
#if ($info.bundleJre)
7+
jvm_path=${info.jreDirectoryName}
8+
#end
9+
#if (!$info.bundleJre && $info.jreMinVersion)
10+
min_java=${info.jreMinVersion}
11+
#end
12+
launch_options_file=${info.name}.l4j.ini

0 commit comments

Comments
 (0)