Skip to content

Commit 514265d

Browse files
committed
added windowssigner class to bypass signerhelper private-package accesibility and some refactoring
1 parent 1c5a0cb commit 514265d

15 files changed

+112
-633
lines changed

build.gradle

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,15 @@ dependencies {
4242
implementation 'org.twdata.maven:mojo-executor:2.3.0'
4343
implementation 'commons-io:commons-io:2.11.0'
4444
implementation 'org.apache.commons:commons-lang3:3.9'
45-
implementation 'org.apache.commons:commons-collections4:4.1'
45+
implementation 'org.apache.commons:commons-collections4:4.3'
4646
implementation 'org.apache.commons:commons-compress:1.21'
4747
implementation 'org.apache.velocity:velocity-engine-core:2.3'
4848
implementation 'org.vafer:jdeb:1.9'
4949
implementation 'net.jsign:jsign-core:6.0'
5050
implementation 'org.redline-rpm:redline:1.2.10'
5151
implementation 'edu.sc.seis.launch4j:launch4j:3.0.5'
5252

53-
testImplementation 'junit:junit:4.12'
53+
testImplementation 'junit:junit:4.13.1'
5454

5555
compileOnly 'org.apache.maven.plugin-tools:maven-plugin-annotations:3.6.0'
5656

@@ -72,7 +72,7 @@ targetCompatibility = JavaVersion.VERSION_1_8
7272

7373
compileJava.options.encoding = 'UTF-8'
7474

75-
// supress javadoc warnings
75+
// suppress javadoc warnings
7676
javadoc.options.addStringOption('Xdoclint:none', '-quiet')
7777

7878
java {
@@ -154,7 +154,8 @@ publishing {
154154
}
155155

156156
// runs the plugin description generator
157-
task generatePluginDescriptor(type: JavaExec, dependsOn: compileJava) {
157+
tasks.register('generatePluginDescriptor', JavaExec) {
158+
dependsOn compileJava
158159
def pluginDescriptorFile = new File(project.compileJava.destinationDirectory.asFile.get(), 'META-INF/maven/plugin.xml')
159160

160161
// FIXME: this does not seem to be working
@@ -196,27 +197,27 @@ nexusStaging {
196197
password = project.findProperty('ossrhPassword') ?: ''
197198
}
198199

199-
task updateUniversalJavaApplicationStub(type : Download) {
200+
tasks.register('updateUniversalJavaApplicationStub', Download) {
200201
def version = '20230601.235708'
201202
group 'Update assets'
202-
description 'Downloads compiled and scripted versions of universalJavaApplicationStub to src/main/resources/mac overriding the existing ones.'
203+
description 'Downloads compiled and scripted versions of universalJavaApplicationStub to src/main/resources/mac overriding the existing ones.'
203204
src([
204-
"https://github.com/fvarrui/universalJavaApplicationStub/releases/download/${version}/universalJavaApplicationStub.sh",
205-
"https://github.com/fvarrui/universalJavaApplicationStub/releases/download/${version}/universalJavaApplicationStub.x86_64",
206-
"https://github.com/fvarrui/universalJavaApplicationStub/releases/download/${version}/universalJavaApplicationStub.arm64",
207-
"https://github.com/fvarrui/universalJavaApplicationStub/releases/download/${version}/universalJavaApplicationStub"
205+
"https://github.com/fvarrui/universalJavaApplicationStub/releases/download/${version}/universalJavaApplicationStub.sh",
206+
"https://github.com/fvarrui/universalJavaApplicationStub/releases/download/${version}/universalJavaApplicationStub.x86_64",
207+
"https://github.com/fvarrui/universalJavaApplicationStub/releases/download/${version}/universalJavaApplicationStub.arm64",
208+
"https://github.com/fvarrui/universalJavaApplicationStub/releases/download/${version}/universalJavaApplicationStub"
208209
])
209210
dest file('src/main/resources/mac')
210-
overwrite true
211+
overwrite true
211212
}
212213

213-
task updateWhyJavaLauncher(type : Download) {
214+
tasks.register('updateWhyJavaLauncher', Download) {
214215
def version = '1.1.2'
215216
group 'Update assets'
216-
description 'Downloads JavaLauncher.exe to src/main/resources/windows and overwrites the existing one.'
217+
description 'Downloads JavaLauncher.exe to src/main/resources/windows and overwrites the existing one.'
217218
src([
218-
"https://github.com/AstroImageJ/Why/releases/download/${version}/JavaLauncher.exe"
219+
"https://github.com/AstroImageJ/Why/releases/download/${version}/JavaLauncher.exe"
219220
])
220221
dest file('src/main/resources/windows')
221-
overwrite true
222+
overwrite true
222223
}

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.HashSet;
55
import java.util.List;
66

7+
import net.jsign.WindowsSigner;
78
import org.apache.commons.lang3.StringUtils;
89

910
import edu.sc.seis.launch4j.tasks.Launch4jLibraryTask;
@@ -78,8 +79,6 @@ protected File doApply(WindowsPackager packager) throws Exception {
7879
l4jTask.getLanguage().set(winConfig.getLanguage());
7980
l4jTask.getActions().forEach(action -> action.execute(l4jTask));
8081

81-
sign(getGenericExe(), packager);
82-
8382
FileUtils.copyFileToFile(getGenericExe(), executable);
8483

8584
return createBootstrapScript(packager);

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

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.util.List;
1515
import java.util.stream.Collectors;
1616

17+
import net.jsign.WindowsSigner;
1718
import org.apache.commons.lang3.StringUtils;
1819
import org.twdata.maven.mojoexecutor.MojoExecutor.Element;
1920

@@ -66,11 +67,9 @@ protected File doApply(WindowsPackager packager) throws Exception {
6667
FileUtils.copyFileToFolder(jarFile, appFolder);
6768
jarPath = jarFile.getName();
6869
}
69-
70-
List<Element> optsElements = vmArgs.stream().map(arg -> element("opt", arg)).collect(Collectors.toList());
71-
72-
List<Element> jreElements = new ArrayList<>();
73-
jreElements.add(element("opts", optsElements.toArray(new Element[optsElements.size()])));
70+
71+
List<Element> jreElements = new ArrayList<>();
72+
jreElements.add(element("opts", vmArgs.stream().map(arg -> element("opt", arg)).toArray(Element[]::new)));
7473
jreElements.add(element("path", bundleJre ? jreDirectoryName : "%JAVA_HOME%;%PATH%"));
7574
if (!StringUtils.isBlank(jreMinVersion)) {
7675
jreElements.add(element("minVersion", jreMinVersion));
@@ -91,7 +90,7 @@ protected File doApply(WindowsPackager packager) throws Exception {
9190
)
9291
);
9392
pluginConfig.add(element("chdir", useResourcesAsWorkingDir ? "." : ""));
94-
pluginConfig.add(element("jre", jreElements.toArray(new Element[jreElements.size()])));
93+
pluginConfig.add(element("jre", jreElements.toArray(new Element[0])));
9594
pluginConfig.add(
9695
element("versionInfo",
9796
element("fileVersion", winConfig.getFileVersion()),
@@ -119,11 +118,9 @@ protected File doApply(WindowsPackager packager) throws Exception {
119118
version("2.4.1")
120119
),
121120
goal("launch4j"),
122-
configuration(pluginConfig.toArray(new Element[pluginConfig.size()])),
121+
configuration(pluginConfig.toArray(new Element[0])),
123122
Context.getMavenContext().getEnv()
124123
);
125-
126-
sign(getGenericExe(), packager);
127124

128125
FileUtils.copyFileToFile(getGenericExe(), executable);
129126

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
import io.github.fvarrui.javapackager.utils.FileUtils;
88
import io.github.fvarrui.javapackager.utils.VelocityUtils;
99

10-
public abstract class AbstractCreateWindowsExe extends WindowsArtifactGenerator {
10+
public abstract class AbstractCreateWindowsExe extends ArtifactGenerator<WindowsPackager> {
1111

12-
private File outputFolder;
12+
private final File outputFolder;
1313
private File genericManifest;
1414
private File genericIcon;
1515
private File genericJar;

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121

2222
/**
23-
* Bundles a Java Runtime Enrironment (JRE) with the app
23+
* Bundles a Java Runtime Environment (JRE) with the app
2424
*/
2525
public class BundleJre extends ArtifactGenerator<Packager> {
2626

@@ -139,7 +139,7 @@ protected File doApply(Packager packager) throws Exception {
139139

140140
// gets JDK release info
141141
Map<String,String> releaseMap = JDKUtils.getRelease(jdkPath);
142-
String releaseInfo = "add:IMAGE_TYPE=\"JRE\":OS_ARCH=\"" + releaseMap.get("OS_ARCH") + "\":OS_NAME=" + releaseMap.get("OS_NAME") + "\"";
142+
String releaseInfo = "add:IMAGE_TYPE=\"JRE\":OS_ARCH=\"" + releaseMap.get("OS_ARCH") + "\":OS_NAME=\"" + releaseMap.get("OS_NAME") + "\"";
143143

144144
// full path to jlink command
145145
File jlink = new File(currentJdk, "/bin/jlink");
@@ -186,7 +186,7 @@ protected File doApply(Packager packager) throws Exception {
186186
}
187187

188188
// updates bundle jre property value, as this artifact generator could disable this option
189-
// (e.g. when bundling a jre from a different platform than the current one)
189+
// (e.g., when bundling a jre from a different platform than the current one)
190190
packager.bundleJre(bundleJre);
191191

192192
return destinationFolder;

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import io.github.fvarrui.javapackager.utils.Logger;
1010
import io.github.fvarrui.javapackager.utils.RcEdit;
1111
import io.github.fvarrui.javapackager.utils.VelocityUtils;
12+
import net.jsign.WindowsSigner;
1213

1314
/**
1415
* Creates Windows executable with WinRun4j
@@ -78,9 +79,6 @@ protected File doApply(WindowsPackager packager) throws Exception {
7879
// copies ini file to app folder
7980
FileUtils.copyFileToFolder(genericIni, appFolder);
8081

81-
// signs generated exe file
82-
sign(getGenericExe(), packager);
83-
8482
// copies exe file to app folder with apps name
8583
FileUtils.copyFileToFile(getGenericExe(), executable);
8684

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.Arrays;
66
import java.util.Optional;
77

8+
import net.jsign.WindowsSigner;
89
import org.apache.commons.lang3.StringUtils;
910

1011
import io.github.fvarrui.javapackager.model.Arch;
@@ -146,9 +147,6 @@ protected File doApply(WindowsPackager packager) throws Exception {
146147
File iniFile = new File(appFolder, name + ".ini");
147148
FileUtils.copyFileToFile(genericIni, iniFile);
148149

149-
// signs generated exe file
150-
sign(getGenericExe(), packager);
151-
152150
// copies exe file to app folder with apps name
153151
FileUtils.copyFileToFile(getGenericExe(), executable);
154152

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@
88
import io.github.fvarrui.javapackager.utils.Logger;
99
import io.github.fvarrui.javapackager.utils.VelocityUtils;
1010
import io.github.fvarrui.javapackager.utils.XMLUtils;
11+
import net.jsign.WindowsSigner;
1112

1213
/**
13-
* Creates a MSI file including all app folder's content only for
14+
* Creates an MSI file including all app folder's content only for
1415
* Windows so app could be easily distributed
1516
*/
16-
public class GenerateMsi extends WindowsArtifactGenerator {
17+
public class GenerateMsi extends ArtifactGenerator<WindowsPackager> {
1718

1819
public GenerateMsi() {
1920
super("MSI installer");
@@ -70,8 +71,8 @@ protected File doApply(WindowsPackager packager) throws Exception {
7071
}
7172

7273
// sign installer
73-
sign(msiFile, packager);
74-
74+
WindowsSigner.sign(msiFile, packager.getDisplayName(), packager.getUrl(), packager.getWinConfig().getSigning());
75+
7576
return msiFile;
7677
}
7778

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
import io.github.fvarrui.javapackager.utils.XMLUtils;
1010

1111
/**
12-
* Creates a MSI file including all app folder's content only for Windows so app
12+
* Creates an MSI file including all app folder's content only for Windows so app
1313
* could be easily distributed
1414
*/
15-
public class GenerateMsm extends WindowsArtifactGenerator {
15+
public class GenerateMsm extends ArtifactGenerator<WindowsPackager> {
1616

1717
public GenerateMsm() {
1818
super("MSI merge module");
@@ -50,7 +50,7 @@ protected File doApply(WindowsPackager packager) throws Exception {
5050
VelocityUtils.render("windows/msm.wxs.vtl", wxsFile, packager);
5151
Logger.info("WXS file generated in " + wxsFile + "!");
5252

53-
// pretiffy wxs
53+
// prettify wxs
5454
XMLUtils.prettify(wxsFile);
5555

5656
// candle wxs file

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@
77
import io.github.fvarrui.javapackager.utils.FileUtils;
88
import io.github.fvarrui.javapackager.utils.Logger;
99
import io.github.fvarrui.javapackager.utils.VelocityUtils;
10+
import net.jsign.WindowsSigner;
1011

1112
/**
1213
* Creates a Setup file including all app folder's content only for
1314
* Windows so app could be easily distributed
1415
*/
15-
public class GenerateSetup extends WindowsArtifactGenerator {
16+
public class GenerateSetup extends ArtifactGenerator<WindowsPackager> {
1617

1718
public GenerateSetup() {
1819
super("Setup installer");
@@ -49,7 +50,7 @@ protected File doApply(WindowsPackager packager) throws Exception {
4950
File issFile = new File(assetsFolder, name + ".iss");
5051
VelocityUtils.render("windows/iss.vtl", issFile, packager);
5152

52-
// generates windows installer with inno setup command line compiler
53+
// generates Windows installer with inno setup command line compiler
5354
CommandUtils.execute("iscc", "/O" + outputDirectory.getAbsolutePath(), "/F" + name + "_" + version, issFile);
5455

5556
// setup file
@@ -59,8 +60,8 @@ protected File doApply(WindowsPackager packager) throws Exception {
5960
}
6061

6162
// sign installer
62-
sign(setupFile, packager);
63-
63+
WindowsSigner.sign(setupFile, packager.getDisplayName(), packager.getUrl(), packager.getWinConfig().getSigning());
64+
6465
return setupFile;
6566
}
6667

0 commit comments

Comments
 (0)