Skip to content

Commit 09eaa7e

Browse files
committed
A javapackager extension and default package task
1 parent bdc458a commit 09eaa7e

File tree

8 files changed

+235
-133
lines changed

8 files changed

+235
-133
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package io.github.fvarrui.javapackager.gradle;
2+
3+
import java.io.File;
4+
import java.util.ArrayList;
5+
import java.util.List;
6+
7+
import org.gradle.api.DefaultTask;
8+
import org.gradle.api.tasks.OutputFiles;
9+
import org.gradle.api.tasks.TaskAction;
10+
11+
import io.github.fvarrui.javapackager.packagers.Packager;
12+
13+
public abstract class AbstractPackageTask extends DefaultTask {
14+
15+
@OutputFiles
16+
private List<File> outputFiles;
17+
18+
public List<File> getOutputFiles() {
19+
return outputFiles != null ? outputFiles : new ArrayList<>();
20+
}
21+
22+
// ================
23+
// task constructor
24+
// ================
25+
26+
public AbstractPackageTask() {
27+
super();
28+
setGroup(PackagePlugin.GROUP_NAME);
29+
setDescription("Packages the application as a native Windows, Mac OS X or GNU/Linux executable and creates an installer");
30+
}
31+
32+
// ===========
33+
// task action
34+
// ===========
35+
36+
@TaskAction
37+
public void doPackage() {
38+
39+
try {
40+
41+
Packager packager = createPackager();
42+
43+
// generates app, installers and bundles
44+
File app = packager.createApp();
45+
List<File> installers = packager.generateInstallers();
46+
List<File> bundles = packager.createBundles();
47+
48+
// sets generated files as output
49+
outputFiles = new ArrayList<>();
50+
outputFiles.add(app);
51+
outputFiles.addAll(installers);
52+
outputFiles.addAll(bundles);
53+
54+
} catch (Exception e) {
55+
56+
throw new RuntimeException(e.getMessage(), e);
57+
58+
}
59+
60+
}
61+
62+
protected abstract Packager createPackager() throws Exception;
63+
64+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package io.github.fvarrui.javapackager.gradle;
2+
3+
import static io.github.fvarrui.javapackager.utils.ObjectUtils.defaultIfNull;
4+
5+
import io.github.fvarrui.javapackager.packagers.Packager;
6+
import io.github.fvarrui.javapackager.packagers.PackagerFactory;
7+
8+
public class DefaultPackageTask extends AbstractPackageTask {
9+
10+
@Override
11+
protected Packager createPackager() throws Exception {
12+
13+
PackagePluginExtension extension = getProject().getExtensions().findByType(PackagePluginExtension.class);
14+
15+
return (Packager) PackagerFactory.createPackager(extension.getPlatform())
16+
.additionalModules(extension.getAdditionalModules())
17+
.additionalResources(extension.getAdditionalResources())
18+
.administratorRequired(extension.getAdministratorRequired())
19+
.version(defaultIfNull(extension.getVersion(), getProject().getVersion().toString()))
20+
.assetsDir(extension.getAssetsDir())
21+
.bundleJre(extension.getBundleJre())
22+
.copyDependencies(extension.getCopyDependencies())
23+
.createTarball(extension.getCreateTarball())
24+
.createZipball(extension.getCreateZipball())
25+
.customizedJre(extension.getCustomizedJre())
26+
.description(extension.getDescription())
27+
.displayName(extension.getDisplayName())
28+
.envPath(extension.getEnvPath())
29+
.extra(extension.getExtra())
30+
.generateInstaller(extension.getGenerateInstaller())
31+
.iconFile(extension.getIconFile())
32+
.jdkPath(extension.getJdkPath())
33+
.jreDirectoryName(extension.getJreDirectoryName())
34+
.jrePath(extension.getJrePath())
35+
.licenseFile(extension.getLicenseFile())
36+
.linuxConfig(extension.getLinuxConfig())
37+
.macConfig(extension.getMacConfig())
38+
.mainClass(extension.getMainClass())
39+
.modules(extension.getModules())
40+
.name(extension.getName())
41+
.organizationEmail(extension.getOrganizationEmail())
42+
.organizationName(extension.getOrganizationName())
43+
.organizationUrl(extension.getOrganizationUrl())
44+
.outputDirectory(extension.getOutputDirectory())
45+
.runnableJar(extension.getRunnableJar())
46+
.useResourcesAsWorkingDir(extension.isUseResourcesAsWorkingDir())
47+
.url(extension.getUrl())
48+
.vmArgs(extension.getVmArgs())
49+
.winConfig(extension.getWinConfig());
50+
51+
}
52+
53+
}

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

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,15 @@
11
package io.github.fvarrui.javapackager.gradle;
22

3-
import javax.inject.Inject;
4-
53
import org.gradle.api.Plugin;
64
import org.gradle.api.Project;
7-
import org.gradle.internal.impldep.org.eclipse.jgit.annotations.NonNull;
8-
import org.gradle.internal.reflect.Instantiator;
95

106
import io.github.fvarrui.javapackager.packagers.Context;
117

128
public class PackagePlugin implements Plugin<Project> {
139

1410
public static final String GROUP_NAME = "JavaPackager";
15-
public static final String SETTINGS_EXT_NAME = "javaPackager";
16-
17-
@NonNull final Instantiator instantiator;
18-
19-
@Inject
20-
public PackagePlugin(@NonNull Instantiator instantiator) {
21-
this.instantiator = instantiator;
22-
}
11+
public static final String SETTINGS_EXT_NAME = "javapackager";
12+
public static final String PACKAGE_TASK_NAME = "package";
2313

2414
@Override
2515
public void apply(Project project) {
@@ -29,8 +19,8 @@ public void apply(Project project) {
2919
project.getPluginManager().apply("java");
3020
project.getPluginManager().apply("edu.sc.seis.launch4j");
3121

32-
// project.getExtensions().create(SETTINGS_EXT_NAME, PackagePluginExtension.class, instantiator, project);
33-
// project.getTasks().create(PackageTask.PACKAGE_TASK_NAME, PackageTask.class).dependsOn("build");
22+
project.getExtensions().create(SETTINGS_EXT_NAME, PackagePluginExtension.class, project);
23+
project.getTasks().create(PACKAGE_TASK_NAME, DefaultPackageTask.class).dependsOn("build");
3424

3525
}
3626

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

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,48 @@
11
package io.github.fvarrui.javapackager.gradle;
22

3+
import java.io.File;
4+
import java.util.ArrayList;
5+
import java.util.HashMap;
6+
37
import org.gradle.api.Project;
4-
import org.gradle.internal.impldep.org.eclipse.jgit.annotations.NonNull;
5-
import org.gradle.internal.reflect.Instantiator;
68

79
import groovy.lang.Closure;
810
import io.github.fvarrui.javapackager.model.LinuxConfig;
911
import io.github.fvarrui.javapackager.model.MacConfig;
12+
import io.github.fvarrui.javapackager.model.Platform;
1013
import io.github.fvarrui.javapackager.model.WindowsConfig;
1114
import io.github.fvarrui.javapackager.packagers.PackagerSettings;
1215

1316
public class PackagePluginExtension extends PackagerSettings {
1417

1518
private Project project;
1619

17-
public PackagePluginExtension(@NonNull Instantiator instantiator, Project project) {
20+
public PackagePluginExtension(Project project) {
21+
super();
1822
this.project = project;
23+
this.platform = Platform.auto;
24+
this.additionalModules = new ArrayList<>();
25+
this.additionalResources = new ArrayList<>();
26+
this.administratorRequired = false;
27+
this.assetsDir = new File(project.getProjectDir(), "assets");
28+
this.bundleJre = true;
29+
this.copyDependencies = true;
30+
this.createTarball = false;
31+
this.createZipball = false;
32+
this.customizedJre = true;
33+
this.description = project.getDescription();
34+
this.extra = new HashMap<>();
35+
this.generateInstaller = true;
36+
this.jreDirectoryName = "jre";
37+
this.linuxConfig = new LinuxConfig();
38+
this.macConfig = new MacConfig();
39+
this.modules = new ArrayList<>();
40+
this.name = project.getName();
41+
this.organizationEmail = "";
42+
this.useResourcesAsWorkingDir = true;
43+
this.vmArgs = new ArrayList<>();
44+
this.winConfig = new WindowsConfig();
45+
this.outputDirectory = project.getBuildDir();
1946
}
2047

2148
public LinuxConfig linuxConfig(Closure<LinuxConfig> closure) {
@@ -36,4 +63,4 @@ public WindowsConfig winConfig(Closure<WindowsConfig> closure) {
3663
return winConfig;
3764
}
3865

39-
}
66+
}

0 commit comments

Comments
 (0)