Skip to content

Commit dd2fa51

Browse files
committedApr 5, 2022
Merge branch 'devel'
2 parents d240244 + 6f3f6fd commit dd2fa51

28 files changed

+250
-104
lines changed
 

‎README.md

+9-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ JavaPackager is a hybrid plugin for **Maven** and **Gradle** which provides an e
1313

1414
It was born while teaching to my students how to build and distribute their Java apps, and after seeing that a chain of several plugins was needed to achieve this task, I decided to develop a plugin :ring: to govern them all.
1515

16+
## Apps packaged with JavaPackager
17+
18+
- [Spektar Design Lab](https://spektar.io/)
19+
1620
## How to use this plugin
1721

1822
### Package your app with Maven
@@ -23,7 +27,7 @@ Add the following `plugin` tag to your `pom.xml`:
2327
<plugin>
2428
<groupId>io.github.fvarrui</groupId>
2529
<artifactId>javapackager</artifactId>
26-
<version>1.6.5</version>
30+
<version>1.6.6</version>
2731
<executions>
2832
<execution>
2933
<phase>package</phase>
@@ -71,7 +75,7 @@ buildscript {
7175
mavenCentral()
7276
}
7377
dependencies {
74-
classpath 'io.github.fvarrui:javapackager:1.6.5'
78+
classpath 'io.github.fvarrui:javapackager:1.6.6'
7579
}
7680
}
7781
@@ -151,6 +155,7 @@ By default it will generate next artifacts in `${outputDirectory} ` folder:
151155
| `displayName` | :x: | `${project.name}` or `${name}` | App name to show. |
152156
| `envPath` | :x: | | Defines PATH environment variable in GNU/Linux and Mac OS X startup scripts. |
153157
| `extra` | :x: | | Map with extra properties to be used in customized Velocity templates, accesible through `$info.extra` variable. |
158+
| `forceInstaller` | :x: | `false` | If `true`, skips operating system check when generating installers. |
154159
| `generateInstaller` | :x: | `true` | Generates an installer for the app. |
155160
| `jdkPath` | :x: | `${java.home}` | JDK used to generate a customized JRE. It allows to bundle customized JREs for different platforms. |
156161
| `jreDirectoryName` | :x: | `"jre"` | Bundled JRE directory name. |
@@ -319,6 +324,8 @@ And then, run (ommit `./` on Windows):
319324

320325
> Related [guide](https://plugins.gradle.org/docs/submit).
321326
327+
328+
322329
## Future features
323330

324331
Check the [TO-DO list](https://github.com/fvarrui/JavaPackager/projects/1#column-7704117) to know the features we plan to add to JavaPackager.

‎build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ dependencies {
7070
}
7171

7272
group = 'io.github.fvarrui'
73-
version = '1.6.5'
73+
version = '1.6.6'
7474
description = 'Hybrid Maven/Gradle plugin to package Java applications as native Windows, Mac OS X or GNU/Linux executables and create installers for them'
7575

7676
sourceCompatibility = JavaVersion.VERSION_1_8

‎docs/windows-specific-properties.md

+19-21
Original file line numberDiff line numberDiff line change
@@ -76,29 +76,27 @@
7676

7777
## Exe creation properties
7878

79-
| Property | Mandatory | Default value | Description |
80-
| ------------------- | --------- | --------------------- | ---------------------------------------------------------------------- |
81-
| `headerType` | :x: | `"gui"` | EXE header type: `console` or `gui`. |
82-
| `wrapJar` | :x: | `true` | Wrap JAR file in native EXE. |
83-
| `companyName` | :x: | `${organizationName}` | EXE company name. |
84-
| `fileVersion` | :x: | `"1.0.0.0"` | EXE file version. |
85-
| `txtFileVersion` | :x: | `${version}` | EXE txt file version. |
86-
| `productVersion` | :x: | `"1.0.0.0"` | EXE product version. |
87-
| `txtProductVersion` | :x: | `${version}` | EXE txt product version. |
88-
| `fileDescription` | :x: | `${description}` | EXE file description. |
89-
| `copyright` | :x: | `${organizationName}` | EXE copyright. |
90-
| `productName` | :x: | `${name}` | EXE product name. |
91-
| `internalName` | :x: | `${name}` | EXE internal name. |
92-
| `originalFilename` | :x: | `${name}.exe` | EXE original filename. |
93-
| `trademark` | :x: | | EXE trademark. |
94-
| `language` | :x: | | EXE language. |
95-
| `exeCreationTool` | :x: | `launch4j` | EXE creation tool: `launch    4j` or `winrun4j`. |
96-
| `vmLocation` | :x: | | `jvm.dll` path relative to the bundled JRE. **Only for WinRun4J**. \*1 |
79+
| Property | Mandatory | Default value | Description |
80+
| ------------------- | --------- | --------------------- | -------------------------------------------------------------------------------------------------------------------- |
81+
| `headerType` | :x: | `"gui"` | EXE header type: `console` or `gui`. |
82+
| `wrapJar` | :x: | `true` | Wrap JAR file in native EXE. |
83+
| `companyName` | :x: | `${organizationName}` | EXE company name. |
84+
| `fileVersion` | :x: | `"1.0.0.0"` | EXE file version. |
85+
| `txtFileVersion` | :x: | `${version}` | EXE txt file version. |
86+
| `productVersion` | :x: | `"1.0.0.0"` | EXE product version. |
87+
| `txtProductVersion` | :x: | `${version}` | EXE txt product version. |
88+
| `fileDescription` | :x: | `${description}` | EXE file description. |
89+
| `copyright` | :x: | `${organizationName}` | EXE copyright. |
90+
| `productName` | :x: | `${name}` | EXE product name. |
91+
| `internalName` | :x: | `${name}` | EXE internal name. |
92+
| `originalFilename` | :x: | `${name}.exe` | EXE original filename. |
93+
| `trademark` | :x: | | EXE trademark. |
94+
| `language` | :x: | | EXE language. |
95+
| `exeCreationTool` | :x: | `launch4j` | EXE creation tool: [`launch4j`](http://launch4j.sourceforge.net/) or [`winrun4j`](http://winrun4j.sourceforge.net/). |
96+
| `vmLocation` | :x: | | `jvm.dll` path relative to the bundled JRE. **Only for WinRun4J**. \*1 |
9797

9898
> \*1: If a JRE is bundled and `vmLocation` is not specified, it uses `bin\client\jvm.dll` or `bin\server\jvm.dll` as VM location by default.
9999
100-
101-
102100
## Setup generation properties
103101

104102
| Property | Mandatory | Default value | Description |
@@ -110,7 +108,7 @@
110108
| `disableFinishedPage` | :x: | `true` | If this is set to `true`, Setup will not show the **Setup Completed** wizard page. |
111109
| `disableRunAfterInstall` | :x: | `true` | If this is set to `true`, Setup will not **launch the application** after install. |
112110
| `disableWelcomePage` | :x: | `true` | If this is set to `true`, Setup will not show **Welcome Page**. |
113-
| `createDesktopIconTask` | :x: | `true` | If this is set to `true`, Setup will not ask for **desktop icon creation**. |
111+
| `createDesktopIconTask` | :x: | `true` | If this is set to `true`, Setup will ask for **desktop icon creation**. |
114112
| `removeOldLibs` | :x: | `false` | If there's a previous installation, removes old `libs` folder before install. |
115113

116114
### SetupMode

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

+9-1
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,18 @@ protected File doApply(WindowsPackager packager) throws Exception {
3434
String jreDirectoryName = packager.getJreDirectoryName();
3535
String jreMinVersion = packager.getJreMinVersion();
3636
File jarFile = packager.getJarFile();
37+
File appFolder = packager.getAppFolder();
3738

3839
createAssets(packager); // creates a folder only for launch4j assets
3940

40-
String jarPath = winConfig.isWrapJar() ? getGenericJar().getAbsolutePath() : jarFile.getName();
41+
// copies JAR to app folder
42+
String jarPath;
43+
if (winConfig.isWrapJar()) {
44+
jarPath = getGenericJar().getAbsolutePath();
45+
} else {
46+
FileUtils.copyFileToFolder(jarFile, appFolder);
47+
jarPath = jarFile.getName();
48+
}
4149

4250
Launch4jLibraryTask l4jTask = Context.getGradleContext().getLibraryTask();
4351
l4jTask.getOutputs().upToDateWhen(task -> false);

‎src/main/java/io/github/fvarrui/javapackager/gradle/DefaultPackageTask.java

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ protected Packager createPackager() throws Exception {
3333
.envPath(extension.getEnvPath())
3434
.extra(extension.getExtra())
3535
.fileAssociations(extension.getFileAssociations())
36+
.forceInstaller(extension.isForceInstaller())
3637
.generateInstaller(extension.getGenerateInstaller())
3738
.jdkPath(extension.getJdkPath())
3839
.jreDirectoryName(extension.getJreDirectoryName())

‎src/main/java/io/github/fvarrui/javapackager/gradle/GenerateRpm.java

-33
This file was deleted.

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

+2-5
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/gradle/PackagePluginExtension.java

+1
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public PackagePluginExtension(Project project) {
5151
this.winConfig = new WindowsConfig();
5252
this.outputDirectory = project.getBuildDir();
5353
this.scripts = new Scripts();
54+
this.forceInstaller = false;
5455
}
5556

5657
public LinuxConfig linuxConfig(Closure<LinuxConfig> closure) {

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

+13
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,18 @@ public void setGenerateInstaller(Boolean generateInstaller) {
226226
this.generateInstaller = generateInstaller;
227227
}
228228

229+
@Input
230+
@Optional
231+
private Boolean forceInstaller;
232+
233+
public Boolean isForceInstaller() {
234+
return forceInstaller;
235+
}
236+
237+
public void setForceInstaller(Boolean forceInstaller) {
238+
this.forceInstaller = forceInstaller;
239+
}
240+
229241
@InputDirectory
230242
@Optional
231243
private File jdkPath;
@@ -577,6 +589,7 @@ protected Packager createPackager() throws Exception {
577589
.envPath(defaultIfNull(envPath, extension.getEnvPath()))
578590
.extra(defaultIfNull(extra, extension.getExtra()))
579591
.fileAssociations(defaultIfNull(fileAssociations, extension.getFileAssociations()))
592+
.forceInstaller(defaultIfNull(forceInstaller, extension.isForceInstaller()))
580593
.generateInstaller(defaultIfNull(generateInstaller, extension.getGenerateInstaller()))
581594
.jdkPath(defaultIfNull(jdkPath, extension.getJdkPath()))
582595
.jreDirectoryName(defaultIfBlank(jreDirectoryName, extension.getJreDirectoryName()))

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

+9-1
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,18 @@ protected File doApply(WindowsPackager packager) throws Exception {
4545
String classpath = packager.getClasspath();
4646
String jreMinVersion = packager.getJreMinVersion();
4747
File jarFile = packager.getJarFile();
48+
File appFolder = packager.getAppFolder();
4849

4950
createAssets(packager);
5051

51-
String jarPath = winConfig.isWrapJar() ? getGenericJar().getAbsolutePath() : jarFile.getName();
52+
// copies JAR to app folder
53+
String jarPath;
54+
if (winConfig.isWrapJar()) {
55+
jarPath = getGenericJar().getAbsolutePath();
56+
} else {
57+
FileUtils.copyFileToFolder(jarFile, appFolder);
58+
jarPath = jarFile.getName();
59+
}
5260

5361
List<Element> optsElements = vmArgs.stream().map(arg -> element("opt", arg)).collect(Collectors.toList());
5462

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

+2-6
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/maven/PackageMojo.java

+7
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,12 @@ public class PackageMojo extends AbstractMojo {
7272
@Parameter(defaultValue = "true", property = "generateInstaller", required = false)
7373
private Boolean generateInstaller;
7474

75+
/**
76+
* Forces installer generation.
77+
*/
78+
@Parameter(defaultValue = "false", property = "forceInstaller", required = false)
79+
private Boolean forceInstaller;
80+
7581
/**
7682
* Full path to your app main class.
7783
*/
@@ -339,6 +345,7 @@ public void execute() throws MojoExecutionException {
339345
.envPath(envPath)
340346
.extra(extra)
341347
.fileAssociations(fileAssociations)
348+
.forceInstaller(forceInstaller)
342349
.generateInstaller(generateInstaller)
343350
.iconFile(iconFile)
344351
.jdkPath(jdkPath)

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

+1
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@
22

33
public enum WindowsExeCreationTool {
44
launch4j,
5+
why,
56
winrun4j;
67
}

0 commit comments

Comments
 (0)
Failed to load comments.