Skip to content

Commit 55175e9

Browse files
committed
A bootstrap script support for gradle
1 parent 57f2ead commit 55175e9

File tree

8 files changed

+104
-22
lines changed

8 files changed

+104
-22
lines changed

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import io.github.fvarrui.javapackager.model.MacConfig;
1212
import io.github.fvarrui.javapackager.model.Manifest;
1313
import io.github.fvarrui.javapackager.model.Platform;
14+
import io.github.fvarrui.javapackager.model.Scripts;
1415
import io.github.fvarrui.javapackager.model.WindowsConfig;
1516
import io.github.fvarrui.javapackager.packagers.PackagerSettings;
1617

@@ -49,6 +50,7 @@ public PackagePluginExtension(Project project) {
4950
this.vmArgs = new ArrayList<>();
5051
this.winConfig = new WindowsConfig();
5152
this.outputDirectory = project.getBuildDir();
53+
this.scripts = new Scripts();
5254
}
5355

5456
public LinuxConfig linuxConfig(Closure<LinuxConfig> closure) {
@@ -74,5 +76,11 @@ public Manifest manifest(Closure<Manifest> closure) {
7476
project.configure(manifest, closure);
7577
return manifest;
7678
}
79+
80+
public Scripts scripts(Closure<Scripts> closure) {
81+
scripts = new Scripts();
82+
project.configure(scripts, closure);
83+
return scripts;
84+
}
7785

7886
}

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import io.github.fvarrui.javapackager.model.MacConfig;
2020
import io.github.fvarrui.javapackager.model.Manifest;
2121
import io.github.fvarrui.javapackager.model.Platform;
22+
import io.github.fvarrui.javapackager.model.Scripts;
2223
import io.github.fvarrui.javapackager.model.WindowsConfig;
2324
import io.github.fvarrui.javapackager.packagers.Context;
2425
import io.github.fvarrui.javapackager.packagers.Packager;
@@ -540,6 +541,24 @@ public List<FileAssociation> getFileAssociations() {
540541
public void setFileAssociations(List<FileAssociation> fileAssociations) {
541542
this.fileAssociations = fileAssociations;
542543
}
544+
545+
@Input
546+
@Optional
547+
private Scripts scripts;
548+
549+
public Scripts getScripts() {
550+
return scripts;
551+
}
552+
553+
public void setScripts(Scripts scripts) {
554+
this.scripts = scripts;
555+
}
556+
557+
public Scripts scripts(Closure<Scripts> closure) {
558+
scripts = new Scripts();
559+
getProject().configure(scripts, closure);
560+
return scripts;
561+
}
543562

544563
// ===============
545564
// create packager
@@ -589,6 +608,7 @@ protected Packager createPackager() throws Exception {
589608
.outputDirectory(defaultIfNull(outputDirectory, extension.getOutputDirectory()))
590609
.packagingJdk(defaultIfNull(packagingJdk, extension.getPackagingJdk(), Context.getContext().getDefaultToolchain()))
591610
.runnableJar(defaultIfNull(runnableJar, extension.getRunnableJar()))
611+
.scripts(defaultIfNull(scripts, extension.getScripts()))
592612
.useResourcesAsWorkingDir(defaultIfNull(useResourcesAsWorkingDir, extension.isUseResourcesAsWorkingDir()))
593613
.url(defaultIfNull(url, extension.getUrl()))
594614
.version(defaultIfNull(version, extension.getVersion(), getProject().getVersion().toString()))
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package io.github.fvarrui.javapackager.model;
2+
3+
import java.io.File;
4+
5+
public class Scripts {
6+
7+
private File bootstrap;
8+
private File preInstall;
9+
private File postInstall;
10+
11+
public File getBootstrap() {
12+
return bootstrap;
13+
}
14+
15+
public void setBootstrap(File bootstrap) {
16+
this.bootstrap = bootstrap;
17+
}
18+
19+
public File getPreInstall() {
20+
return preInstall;
21+
}
22+
23+
public void setPreInstall(File preInstall) {
24+
this.preInstall = preInstall;
25+
}
26+
27+
public File getPostInstall() {
28+
return postInstall;
29+
}
30+
31+
public void setPostInstall(File postInstall) {
32+
this.postInstall = postInstall;
33+
}
34+
35+
@Override
36+
public String toString() {
37+
return "Scripts [bootstrap=" + bootstrap + ", preInstall=" + preInstall + ", postInstall=" + postInstall + "]";
38+
}
39+
40+
}

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,18 @@ protected void copyAdditionalResources(List<File> resources, File destination) {
198198
}
199199
});
200200

201+
// copy bootstrap script
202+
if (getScripts().getBootstrap() != null && getScripts().getBootstrap().exists()) {
203+
File scriptsFolder = new File(destination, "scripts");
204+
File bootstrapFile = new File(scriptsFolder, "bootstrap");
205+
try {
206+
FileUtils.copyFileToFile(getScripts().getBootstrap(), bootstrapFile);
207+
bootstrapFile.setExecutable(true, false);
208+
} catch (Exception e) {
209+
e.printStackTrace();
210+
}
211+
}
212+
201213
Logger.infoUnindent("All additional resources copied!");
202214

203215
}

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

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import io.github.fvarrui.javapackager.model.MacConfig;
1414
import io.github.fvarrui.javapackager.model.Manifest;
1515
import io.github.fvarrui.javapackager.model.Platform;
16+
import io.github.fvarrui.javapackager.model.Scripts;
1617
import io.github.fvarrui.javapackager.model.WindowsConfig;
1718

1819
/**
@@ -61,15 +62,12 @@ public class PackagerSettings {
6162
protected List<File> additionalModulePaths;
6263
protected List<FileAssociation> fileAssociations;
6364
protected File packagingJdk;
65+
protected Scripts scripts;
6466

6567
public File getPackagingJdk() {
6668
return packagingJdk;
6769
}
6870

69-
public void setPackagingJdk(File packagingJdk) {
70-
this.packagingJdk = packagingJdk;
71-
}
72-
7371
public File getOutputDirectory() {
7472
return outputDirectory;
7573
}
@@ -230,6 +228,10 @@ public List<FileAssociation> getFileAssociations() {
230228
return fileAssociations;
231229
}
232230

231+
public Scripts getScripts() {
232+
return scripts;
233+
}
234+
233235
// fluent api
234236

235237
public PackagerSettings outputDirectory(File outputDirectory) {
@@ -436,21 +438,21 @@ public PackagerSettings fileAssociations(List<FileAssociation> fileAssociations)
436438
this.fileAssociations = fileAssociations;
437439
return this;
438440
}
439-
441+
442+
public PackagerSettings scripts(Scripts scripts) {
443+
this.scripts = scripts;
444+
return this;
445+
}
446+
440447
// some helpful methods
441-
448+
442449
public boolean isThereFileAssociations() {
443450
return fileAssociations != null && !fileAssociations.isEmpty();
444451
}
445-
452+
446453
public String getMimeTypesListAsString(String separator) {
447-
return StringUtils.join(
448-
fileAssociations
449-
.stream()
450-
.map(fa -> fa.getMimeType())
451-
.collect(Collectors.toList()),
452-
separator
453-
);
454+
return StringUtils.join(fileAssociations.stream().map(fa -> fa.getMimeType()).collect(Collectors.toList()),
455+
separator);
454456
}
455457

456458
@Override
@@ -468,10 +470,8 @@ public String toString() {
468470
+ macConfig + ", createTarball=" + createTarball + ", createZipball=" + createZipball + ", extra="
469471
+ extra + ", useResourcesAsWorkingDir=" + useResourcesAsWorkingDir + ", assetsDir=" + assetsDir
470472
+ ", classpath=" + classpath + ", jreMinVersion=" + jreMinVersion + ", manifest=" + manifest
471-
+ ", additionalModulePaths=" + additionalModulePaths + ", packagingJdk=" + packagingJdk +
472-
", fileAssociations=" + fileAssociations + "]";
473+
+ ", additionalModulePaths=" + additionalModulePaths + ", fileAssociations=" + fileAssociations
474+
+ ", packagingJdk=" + packagingJdk + ", scripts=" + scripts + "]";
473475
}
474476

475-
476-
477477
}

src/main/resources/linux/assembly.xml.vtl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#if ($info.bundleJre)
1515
<exclude>${info.jreDirectoryName}/bin/*</exclude>
1616
<exclude>${info.jreDirectoryName}/lib/jspawnhelper</exclude>
17+
<exclude>scripts/*</exclude>
1718
#end
1819
</excludes>
1920
</fileSet>
@@ -25,6 +26,7 @@
2526
#if ($info.bundleJre)
2627
<include>${info.jreDirectoryName}/bin/*</include>
2728
<include>${info.jreDirectoryName}/lib/jspawnhelper</include>
29+
<include>scripts/*</include>
2830
#end
2931
</includes>
3032
<fileMode>0755</fileMode>

src/main/resources/linux/startup.sh.vtl

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,11 @@ JVMClassPath+=":${classpath}"
7676
cd "$SCRIPTPATH"
7777
#end
7878

79+
#if ($info.scripts.bootstrap)
7980
# invoke bootstrap script
8081
$Bootstrap=$SCRIPTPATH/scripts/bootstrap
81-
#if ($info.administratorRequired)
82-
[ -x "$Bootstrap" ] && pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY GDKBACKEND=x11 $Bootstrap
83-
#else
8482
[ -x "$Bootstrap" ] && $Bootstrap
85-
#fi
83+
#end
8684

8785
#if ($info.administratorRequired)
8886
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY GDKBACKEND=x11 $JAVA $JVMDefaultOptions -cp $JVMClassPath ${info.mainClass} $@

src/main/resources/mac/assembly.xml.vtl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#if ($info.bundleJre)
1616
<exclude>Contents/PlugIns/${info.jreDirectoryName}/Contents/Home/bin/*</exclude>
1717
<exclude>Contents/PlugIns/${info.jreDirectoryName}/Contents/Home/lib/jspawnhelper</exclude>
18+
<exclude>Contents/Resources/scripts/*</exclude>
1819
#end
1920
</excludes>
2021
</fileSet>
@@ -27,6 +28,7 @@
2728
#if ($info.bundleJre)
2829
<include>Contents/PlugIns/${info.jreDirectoryName}/Contents/Home/bin/*</include>
2930
<include>Contents/PlugIns/${info.jreDirectoryName}/Contents/Home/lib/jspawnhelper</include>
31+
<include>Contents/Resources/scripts/*</include>
3032
#end
3133
</includes>
3234
<fileMode>0755</fileMode>

0 commit comments

Comments
 (0)