Skip to content

Commit

Permalink
Merge branch 'devel'
Browse files Browse the repository at this point in the history
  • Loading branch information
fvarrui committed Aug 30, 2023
2 parents 15330cc + 1a672bb commit 019de79
Show file tree
Hide file tree
Showing 16 changed files with 187 additions and 57 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# JavaPackager

[![Maven Central](http://img.shields.io/maven-central/v/io.github.fvarrui/javapackager)](https://central.sonatype.com/artifact/io.github.fvarrui/javapackager/1.7.3)
[![Maven Central](http://img.shields.io/maven-central/v/io.github.fvarrui/javapackager)](https://central.sonatype.com/search?smo=true&q=a%3Ajavapackager+g%3Aio.github.fvarrui)
[![GPL-3.0](https://img.shields.io/badge/license-GPL--3.0-%250778B9.svg)](https://www.gnu.org/licenses/gpl-3.0.html)

JavaPackager is a hybrid plugin for **Maven** and **Gradle** which provides an easy way to package Java applications in native Windows, MacOS or GNU/Linux executables, and generate installers for them.
Expand Down
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ dependencies {
implementation 'org.apache.commons:commons-compress:1.21'
implementation 'org.apache.velocity:velocity-engine-core:2.3'
implementation 'org.vafer:jdeb:1.9'
implementation 'net.jsign:jsign-core:3.1'
implementation 'net.jsign:jsign-core:5.0'
implementation 'org.redline-rpm:redline:1.2.10'
implementation 'edu.sc.seis.launch4j:launch4j:2.5.2'

Expand All @@ -64,7 +64,7 @@ dependencies {
}

group = 'io.github.fvarrui'
version = '1.7.3'
version = '1.7.4'
description = 'Hybrid Maven/Gradle plugin to package Java applications as native Windows, Mac OS X or GNU/Linux executables and create installers for them'

sourceCompatibility = JavaVersion.VERSION_1_8
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import io.github.fvarrui.javapackager.model.Manifest;
import io.github.fvarrui.javapackager.model.Platform;
import io.github.fvarrui.javapackager.model.Scripts;
import io.github.fvarrui.javapackager.model.Template;
import io.github.fvarrui.javapackager.model.WindowsConfig;
import io.github.fvarrui.javapackager.packagers.Context;
import io.github.fvarrui.javapackager.packagers.Packager;
Expand Down Expand Up @@ -572,6 +573,18 @@ public Arch getArch() {
public void setArch(Arch arch) {
this.arch = arch;
}

@Input
@Optional
private List<Template> templates;

public List<Template> getTemplates() {
return templates;
}

public void setTemplates(List<Template> templates) {
this.templates = templates;
}

// ===============
// create packager
Expand Down Expand Up @@ -623,6 +636,7 @@ protected Packager createPackager() throws Exception {
.packagingJdk(defaultIfNull(packagingJdk, extension.getPackagingJdk(), Context.getGradleContext().getDefaultToolchain()))
.runnableJar(defaultIfNull(runnableJar, extension.getRunnableJar()))
.scripts(defaultIfNull(scripts, extension.getScripts()))
.templates(defaultIfNull(templates, extension.getTemplates()))
.useResourcesAsWorkingDir(defaultIfNull(useResourcesAsWorkingDir, extension.isUseResourcesAsWorkingDir()))
.url(defaultIfNull(url, extension.getUrl()))
.version(defaultIfNull(version, extension.getVersion(), getProject().getVersion().toString()))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,6 @@ protected File doApply(Packager packager) {
File outputDirectory = packager.getOutputDirectory();
ExecutionEnvironment env = Context.getMavenContext().getEnv();
Manifest manifest = packager.getManifest();
String artifactId = env.getMavenProject().getArtifactId();
File jarFile = new File(outputDirectory, artifactId + "-" + classifier + ".jar");

List<Element> archive = new ArrayList<>();
archive.add(
Expand Down Expand Up @@ -99,9 +97,22 @@ protected File doApply(Packager packager) {

}

File finalJarFile = new File(outputDirectory, name + "-" + version + "-" + classifier + ".jar");
FileUtils.rename(jarFile, finalJarFile.getName());
return finalJarFile;
// gets build.finalName value
String finalName = Context.getMavenContext().getEnv().getMavenProject().getBuild().getFinalName();

// creates file pointing to generated jar file
File finalJarFile = new File(outputDirectory, finalName + "-" + classifier + ".jar");

// creates desired output jar file
File jarFile = new File(outputDirectory, name + "-" + version + "-" + classifier + ".jar");

// renames generated jar to desired one if they are different
if (!finalJarFile.equals(jarFile)) {
FileUtils.rename(finalJarFile, jarFile.getName());
}

return jarFile;

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -321,6 +321,12 @@ public class PackageMojo extends AbstractMojo {
*/
@Parameter(property = "arch", required = false)
private Arch arch;

/**
* Templates configuration
*/
@Parameter(property = "templates", required = false)
private List<Template> templates;

public void execute() throws MojoExecutionException {

Expand Down Expand Up @@ -376,6 +382,7 @@ public void execute() throws MojoExecutionException {
.packagingJdk(packagingJdk)
.runnableJar(runnableJar)
.scripts(scripts)
.templates(templates)
.useResourcesAsWorkingDir(useResourcesAsWorkingDir)
.url(url)
.version(version)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import java.util.Arrays;
import java.util.List;

import org.apache.commons.lang3.ObjectUtils;

import io.github.fvarrui.javapackager.packagers.Packager;

/**
Expand All @@ -19,6 +21,7 @@ public class LinuxConfig implements Serializable {
private boolean generateAppImage = true;
private File pngFile;
private boolean wrapJar = true;
private File installationPath;

public void setCategories(List<String> categories) {
this.categories = categories;
Expand Down Expand Up @@ -67,11 +70,20 @@ public boolean isWrapJar() {
public void setWrapJar(boolean wrapJar) {
this.wrapJar = wrapJar;
}

public File getInstallationPath() {
return installationPath;
}

public void setInstallationPath(File installationPath) {
this.installationPath = installationPath;
}

@Override
public String toString() {
return "LinuxConfig [categories=" + categories + ", generateDeb=" + generateDeb + ", generateRpm=" + generateRpm
+ ", generateAppImage=" + generateAppImage + ", pngFile=" + pngFile + ", wrapJar=" + wrapJar + "]";
+ ", generateAppImage=" + generateAppImage + ", pngFile=" + pngFile + ", wrapJar=" + wrapJar
+ ", installationPath=" + installationPath + "]";
}

/**
Expand All @@ -81,6 +93,7 @@ public String toString() {
*/
public void setDefaults(Packager packager) {
this.setCategories((categories == null || categories.isEmpty()) ? Arrays.asList("Utility") : categories);
this.setInstallationPath(ObjectUtils.defaultIfNull(installationPath, new File("/opt")));
}

}
36 changes: 36 additions & 0 deletions src/main/java/io/github/fvarrui/javapackager/model/Template.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package io.github.fvarrui.javapackager.model;

public class Template {

private String name;
private boolean bom = false;

public Template() {}

public Template(String name, boolean bom) {
this.name = name;
this.bom = bom;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public boolean isBom() {
return bom;
}

public void setBom(boolean bom) {
this.bom = bom;
}

@Override
public String toString() {
return "Template [name=" + name + ", bom=" + bom + "]";
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ protected File doApply(LinuxPackager packager) throws Exception {
File executable = packager.getExecutable();
File javaFile = new File(appFolder, jreDirectoryName + "/bin/java");
File mimeXmlFile = packager.getMimeXmlFile();
File installationPath = packager.getLinuxConfig().getInstallationPath();
File appPath = new File(installationPath, name);

// generates desktop file from velocity template
File desktopFile = new File(assetsFolder, name + ".desktop");
Expand All @@ -87,7 +89,7 @@ protected File doApply(LinuxPackager packager) throws Exception {

Mapper appFolderMapper = new Mapper();
appFolderMapper.setType("perm");
appFolderMapper.setPrefix("/opt/" + name);
appFolderMapper.setPrefix(appPath.getAbsolutePath());
appFolderMapper.setFileMode("644");

Data appFolderData = new Data();
Expand All @@ -102,12 +104,12 @@ protected File doApply(LinuxPackager packager) throws Exception {

Mapper executableMapper = new Mapper();
executableMapper.setType("perm");
executableMapper.setPrefix("/opt/" + name);
executableMapper.setPrefix(appPath.getAbsolutePath());
executableMapper.setFileMode("755");

Data executableData = new Data();
executableData.setType("file");
executableData.setSrc(new File(appFolder.getAbsolutePath() + "/" + name));
executableData.setSrc(executable);
executableData.addMapper(executableMapper);

dataProducers.add(executableData);
Expand Down Expand Up @@ -150,7 +152,7 @@ protected File doApply(LinuxPackager packager) throws Exception {
Mapper javaBinaryMapper = new Mapper();
javaBinaryMapper.setType("perm");
javaBinaryMapper.setFileMode("755");
javaBinaryMapper.setPrefix("/opt/" + name + "/" + jreDirectoryName + "/bin");
javaBinaryMapper.setPrefix(appPath + "/" + jreDirectoryName + "/bin");

Data javaBinaryData = new Data();
javaBinaryData.setType("file");
Expand All @@ -168,7 +170,7 @@ protected File doApply(LinuxPackager packager) throws Exception {
Mapper javaSpawnHelperMapper = new Mapper();
javaSpawnHelperMapper.setType("perm");
javaSpawnHelperMapper.setFileMode("755");
javaSpawnHelperMapper.setPrefix("/opt/" + name + "/" + jreDirectoryName + "/lib");
javaSpawnHelperMapper.setPrefix(appPath + "/" + jreDirectoryName + "/lib");

Data javaSpawnHelperData = new Data();
javaSpawnHelperData.setType("file");
Expand All @@ -182,7 +184,7 @@ protected File doApply(LinuxPackager packager) throws Exception {

// symbolic link in /usr/local/bin to app binary data producer

DataProducer linkData = createLink("/usr/local/bin/" + name, "/opt/" + name + "/" + name);
DataProducer linkData = createLink("/usr/local/bin/" + executable.getName(), appPath + "/" + executable.getName());

dataProducers.add(linkData);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,13 @@ protected File doApply(LinuxPackager packager) throws Exception {
String jreDirectoryName = packager.getJreDirectoryName();
Architecture arch = Architecture.valueOf(packager.getArch().getRpm());
File mimeXmlFile = packager.getMimeXmlFile();
File installationPath = packager.getLinuxConfig().getInstallationPath();
File appPath = new File(installationPath, name);

// generates desktop file from velocity template
File desktopFile = new File(assetsFolder, name + ".desktop");
VelocityUtils.render("linux/desktop.vtl", desktopFile, packager);
Logger.info("Rendering desktop file to " + desktopFile.getAbsolutePath());
Logger.info("Desktop file rendered in " + desktopFile.getAbsolutePath());

// copies desktop file to app
FileUtils.copyFileToFolder(desktopFile, appFolder);
Expand All @@ -68,17 +70,20 @@ protected File doApply(LinuxPackager packager) throws Exception {
executionPermissions.add(new File(appFolder, jreDirectoryName + "/bin/java"));
executionPermissions.add(new File(appFolder, jreDirectoryName + "/lib/jspawnhelper"));

// add all app files
addDirectory(builder, installationPath.getAbsolutePath(), appFolder, executionPermissions);

// link to desktop file
addLink(builder, "/usr/share/applications/" + desktopFile.getName(), "/opt/" + name + "/" + desktopFile.getName());
addLink(builder, "/usr/share/applications/" + desktopFile.getName(), appPath + "/" + desktopFile.getName());

// copy and link to mime.xml file
if (mimeXmlFile != null) {
FileUtils.copyFileToFolder(mimeXmlFile, appFolder);
addLink(builder, "/usr/share/mime/packages/" + mimeXmlFile.getName(), "/opt/" + name + "/" + mimeXmlFile.getName());
addLink(builder, "/usr/share/mime/packages/" + mimeXmlFile.getName(), appPath + "/" + mimeXmlFile.getName());
}

// link to binary
addLink(builder, "/usr/local/bin/" + executable.getName(), "/opt/" + name + "/" + executable.getName());
addLink(builder, "/usr/local/bin/" + executable.getName(), appPath + "/" + executable.getName());

// add all app files
addDirectory(builder, "/opt", appFolder, executionPermissions);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ protected File doApply(WindowsPackager packager) throws Exception {

// generates iss file from velocity template
File issFile = new File(assetsFolder, name + ".iss");
VelocityUtils.render("windows/iss.vtl", issFile, packager, true);
VelocityUtils.render("windows/iss.vtl", issFile, packager);

// generates windows installer with inno setup command line compiler
CommandUtils.execute("iscc", "/O" + outputDirectory.getAbsolutePath(), "/F" + name + "_" + version, issFile);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ public class MacPackager extends Packager {
private File javaFolder;
private File macOSFolder;
private File jreBundleFolder;

public MacPackager() {
super();
platform(Platform.mac);
}

public File getAppFile() {
return appFile;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,8 @@ private void init() throws Exception {
throw new Exception("'mainClass' cannot be null");
}

// sets assetsDir for velocity to locate custom velocity templates
VelocityUtils.setAssetsDir(assetsDir);
// init velocity utils
VelocityUtils.init(this);

// using name as displayName, if it's not specified
displayName = defaultIfBlank(displayName, name);
Expand Down Expand Up @@ -205,26 +205,21 @@ public void resolveResources() throws Exception {
* @param resources List of files and folders to be copied
* @param destination Destination folder. All specified resources will be copied
* here
* @throws Exception
*/
protected void copyAdditionalResources(List<File> resources, File destination) {
protected void copyAdditionalResources(List<File> resources, File destination) throws Exception {

Logger.infoIndent("Copying additional resources");

resources.stream().forEach(r -> {
for (File r : resources) {
if (!r.exists()) {
Logger.warn("Additional resource " + r + " doesn't exist");
return;
throw new Exception("Additional resource " + r + " doesn't exist");
} else if (r.isDirectory()) {
FileUtils.copyFolderToFolder(r, destination);
} else if (r.isFile()) {
FileUtils.copyFileToFolder(r, destination);
}
try {
if (r.isDirectory()) {
FileUtils.copyFolderToFolder(r, destination);
} else if (r.isFile()) {
FileUtils.copyFileToFolder(r, destination);
}
} catch (Exception e) {
Logger.error(e.getMessage(), e);
}
});
}

// copy bootstrap script
if (FileUtils.exists(getScripts().getBootstrap())) {
Expand Down
Loading

0 comments on commit 019de79

Please sign in to comment.