diff --git a/build.gradle b/build.gradle index 9e2b7dcc..37258b01 100644 --- a/build.gradle +++ b/build.gradle @@ -13,7 +13,7 @@ repositories { mavenLocal() mavenCentral() maven { - url 'https://plugins.gradle.org/m2/' + url = uri('https://plugins.gradle.org/m2/') } } @@ -67,8 +67,10 @@ group = 'io.github.fvarrui' version = '1.7.7-SNAPSHOT' 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 -targetCompatibility = JavaVersion.VERSION_1_8 +java { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} compileJava.options.encoding = 'UTF-8' diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e1bef7e8..3ae1e2f1 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/io/github/fvarrui/javapackager/gradle/PackagePluginExtension.java b/src/main/java/io/github/fvarrui/javapackager/gradle/PackagePluginExtension.java index da793647..105015d5 100644 --- a/src/main/java/io/github/fvarrui/javapackager/gradle/PackagePluginExtension.java +++ b/src/main/java/io/github/fvarrui/javapackager/gradle/PackagePluginExtension.java @@ -51,6 +51,7 @@ public PackagePluginExtension(Project project) { this.organizationEmail = ""; this.useResourcesAsWorkingDir = true; this.vmArgs = new ArrayList<>(); + this.appArgs = new ArrayList<>(); this.winConfig = new WindowsConfig(); this.outputDirectory = project.getBuildDir(); this.scripts = new Scripts(); diff --git a/src/main/java/io/github/fvarrui/javapackager/packagers/GenerateMsi.java b/src/main/java/io/github/fvarrui/javapackager/packagers/GenerateMsi.java index 373a3ee8..2333452d 100644 --- a/src/main/java/io/github/fvarrui/javapackager/packagers/GenerateMsi.java +++ b/src/main/java/io/github/fvarrui/javapackager/packagers/GenerateMsi.java @@ -5,6 +5,7 @@ import java.io.File; import io.github.fvarrui.javapackager.model.Platform; +import io.github.fvarrui.javapackager.utils.CommandUtils; import io.github.fvarrui.javapackager.utils.Logger; import io.github.fvarrui.javapackager.utils.VelocityUtils; import io.github.fvarrui.javapackager.utils.XMLUtils; @@ -32,7 +33,7 @@ public boolean skip(WindowsPackager packager) { return true; } - return false; + return false; } @Override @@ -53,17 +54,23 @@ protected File doApply(WindowsPackager packager) throws Exception { // prettify wxs XMLUtils.prettify(wxsFile); - - // candle wxs file - Logger.info("Compiling file " + wxsFile); - File wixobjFile = new File(assetsFolder, name + ".wixobj"); - execute("candle", "-out", wixobjFile, wxsFile); - Logger.info("WIXOBJ file generated in " + wixobjFile + "!"); - // lighting wxs file - Logger.info("Linking file " + wixobjFile); File msiFile = new File(outputDirectory, name + "_" + version + ".msi"); - execute("light", "-sw1076", "-spdb", "-out", msiFile, wixobjFile); + // We can rely on the MSM generation to populate this + if(packager.getWixMajorVersion() == 3) { + // candle wxs file + Logger.info("Compiling file " + wxsFile); + File wixobjFile = new File(assetsFolder, name + ".wixobj"); + execute("candle", "-arch", "x64", "-out", wixobjFile, wxsFile); + Logger.info("WIXOBJ file generated in " + wixobjFile + "!"); + + // lighting wxs file + Logger.info("Linking file " + wixobjFile); + execute("light", "-sw1076", "-spdb", "-out", msiFile, wixobjFile); + } else { + Logger.info("Building file " + wxsFile); + CommandUtils.execute("wix", "build", "-pdbtype", "none", "-arch", "x64", "-out", msiFile, wxsFile); + } // setup file if (!msiFile.exists()) { diff --git a/src/main/java/io/github/fvarrui/javapackager/packagers/GenerateMsm.java b/src/main/java/io/github/fvarrui/javapackager/packagers/GenerateMsm.java index 06b5a97b..d3bf35dd 100644 --- a/src/main/java/io/github/fvarrui/javapackager/packagers/GenerateMsm.java +++ b/src/main/java/io/github/fvarrui/javapackager/packagers/GenerateMsm.java @@ -7,6 +7,7 @@ import io.github.fvarrui.javapackager.utils.Logger; import io.github.fvarrui.javapackager.utils.VelocityUtils; import io.github.fvarrui.javapackager.utils.XMLUtils; +import org.codehaus.plexus.util.cli.CommandLineException; /** * Creates an MSI file including all app folder's content only for Windows so app @@ -40,6 +41,19 @@ protected File doApply(WindowsPackager packager) throws Exception { return packager.getMsmFile(); } + try { + String version = CommandUtils.execute("wix", "-version"); + packager.setWixMajorVersion(Integer.parseInt(version.split("\\.")[0])); + } catch(CommandLineException ex) { + try { + CommandUtils.execute("candle", "-?"); + CommandUtils.execute("light", "-?"); + packager.setWixMajorVersion(3); + } catch(CommandLineException ex2) { + throw new Exception("Either 'wix' or 'candle' and 'light' must be on PATH"); + } + } + File assetsFolder = packager.getAssetsFolder(); String name = packager.getName(); File outputDirectory = packager.getOutputDirectory(); @@ -53,16 +67,21 @@ protected File doApply(WindowsPackager packager) throws Exception { // prettify wxs XMLUtils.prettify(wxsFile); - // candle wxs file - Logger.info("Compiling file " + wxsFile); - File wixobjFile = new File(assetsFolder, name + ".msm.wixobj"); - CommandUtils.execute("candle", "-out", wixobjFile, wxsFile); - Logger.info("WIXOBJ file generated in " + wixobjFile + "!"); - - // lighting wxs file - Logger.info("Linking file " + wixobjFile); File msmFile = new File(outputDirectory, name + "_" + version + ".msm"); - CommandUtils.execute("light", "-sw1076", "-spdb", "-out", msmFile, wixobjFile); + if(packager.getWixMajorVersion() == 3) { + // candle wxs file + Logger.info("Compiling file " + wxsFile); + File wixobjFile = new File(assetsFolder, name + ".msm.wixobj"); + CommandUtils.execute("candle", "-arch", "x64", "-out", wixobjFile, wxsFile); + Logger.info("WIXOBJ file generated in " + wixobjFile + "!"); + + // lighting wxs file + Logger.info("Linking file " + wixobjFile); + CommandUtils.execute("light", "-sw1076", "-spdb", "-out", msmFile, wixobjFile); + } else { + Logger.info("Building file " + wxsFile); + CommandUtils.execute("wix", "build", "-pdbtype", "none", "-arch", "x64", "-out", msmFile, wxsFile); + } // setup file if (!msmFile.exists()) { diff --git a/src/main/java/io/github/fvarrui/javapackager/packagers/PackagerSettings.java b/src/main/java/io/github/fvarrui/javapackager/packagers/PackagerSettings.java index 88d7ff81..8e310f15 100644 --- a/src/main/java/io/github/fvarrui/javapackager/packagers/PackagerSettings.java +++ b/src/main/java/io/github/fvarrui/javapackager/packagers/PackagerSettings.java @@ -937,12 +937,12 @@ public String toString() { + ", customizedJre=" + customizedJre + ", jrePath=" + jrePath + ", jdkPath=" + jdkPath + ", additionalResources=" + additionalResources + ", modules=" + modules + ", additionalModules=" + additionalModules + ", platform=" + platform + ", envPath=" + envPath + ", vmArgs=" + vmArgs - + ", runnableJar=" + runnableJar + ", copyDependencies=" + copyDependencies + ", jreDirectoryName=" - + jreDirectoryName + ", winConfig=" + winConfig + ", linuxConfig=" + linuxConfig + ", macConfig=" - + macConfig + ", createTarball=" + createTarball + ", tarballName=" + tarballName + ", createZipball=" - + createZipball + ", zipballName=" + zipballName + ", extra=" + extra + ", useResourcesAsWorkingDir=" - + useResourcesAsWorkingDir + ", assetsDir=" + assetsDir + ", classpath=" + classpath - + ", jreMinVersion=" + jreMinVersion + ", manifest=" + manifest + ", additionalModulePaths=" + + ", appArgs=" + appArgs + ",runnableJar=" + runnableJar + ", copyDependencies=" + copyDependencies + + ", jreDirectoryName=" + jreDirectoryName + ", winConfig=" + winConfig + ", linuxConfig=" + linuxConfig + + ", macConfig=" + macConfig + ", createTarball=" + createTarball + ", tarballName=" + tarballName + + ", createZipball=" + createZipball + ", zipballName=" + zipballName + ", extra=" + extra + + ", useResourcesAsWorkingDir=" + useResourcesAsWorkingDir + ", assetsDir=" + assetsDir+ ", classpath=" + + classpath + ", jreMinVersion=" + jreMinVersion + ", manifest=" + manifest + ", additionalModulePaths=" + additionalModulePaths + ", fileAssociations=" + fileAssociations + ", packagingJdk=" + packagingJdk + ", scripts=" + scripts + ", arch=" + arch + ", templates=" + templates + "]"; } diff --git a/src/main/java/io/github/fvarrui/javapackager/packagers/WindowsPackager.java b/src/main/java/io/github/fvarrui/javapackager/packagers/WindowsPackager.java index 54241040..da8e85ea 100644 --- a/src/main/java/io/github/fvarrui/javapackager/packagers/WindowsPackager.java +++ b/src/main/java/io/github/fvarrui/javapackager/packagers/WindowsPackager.java @@ -19,6 +19,7 @@ public class WindowsPackager extends Packager { private File manifestFile; private File msmFile; + private int wixMajorVersion; public File getManifestFile() { return manifestFile; @@ -28,9 +29,17 @@ public File getMsmFile() { return msmFile; } + public int getWixMajorVersion() { + return wixMajorVersion; + } + public void setMsmFile(File msmFile) { this.msmFile = msmFile; } + + public void setWixMajorVersion(int wixMajorVersion) { + this.wixMajorVersion = wixMajorVersion; + } public WindowsPackager() { super(); diff --git a/src/main/resources/windows/msm.wxs.vtl b/src/main/resources/windows/msm.wxs.vtl index bcace9f8..2006819b 100644 --- a/src/main/resources/windows/msm.wxs.vtl +++ b/src/main/resources/windows/msm.wxs.vtl @@ -19,7 +19,7 @@ #end #else - + #if($file.equals(${info.executable})) @@ -32,15 +32,26 @@ #end #end +#if($info.wixMajorVersion == 3) - - +#end + + 3) + Guid="${GUID.randomUUID()}" InstallerVersion="${installedVersion}" + #end + > + #if($info.wixMajorVersion == 3) + #end + + #if($info.wixMajorVersion == 3) + #end #list(${info.appFolder}) - + #if($info.wixMajorVersion == 3)#end #if ($info.winConfig.registry) - + 3)Directory="TARGETDIR"#end> #foreach ($entry in $info.winConfig.registry.entries) #end + #if($info.wixMajorVersion == 3) + #end \ No newline at end of file diff --git a/src/main/resources/windows/wxs.vtl b/src/main/resources/windows/wxs.vtl index af93e34a..958379f5 100644 --- a/src/main/resources/windows/wxs.vtl +++ b/src/main/resources/windows/wxs.vtl @@ -1,15 +1,26 @@ #set($moduleName = $info.name.replaceAll("[^A-Za-z0-9_.]", "_") + "_Module") +#if($info.wixMajorVersion == 3) - +#end + + #if($info.wixMajorVersion > 3) + + + #else - + + #end + #if($info.wixMajorVersion == 3) - + #end + <#if($info.wixMajorVersion > 3)StandardDirectory#{else}Directory#end Id="ProgramFiles64Folder"> - + 3)StandardDirectory#{else}Directory#end> + #if($info.wixMajorVersion == 3) - + #end + 3)AllowAbsent="no"#{else}Absent="disallow"#end AllowAdvertise="no" ConfigurableDirectory="TARGETDIR" Description="${info.description}" Level="1" Title="${info.displayName}"> @@ -18,5 +29,5 @@ #end - + 3)Package#{else}Product#end>