Akman / jpackage-maven-plugin

The jpackage maven plugin lets you create a custom runtime image/installer with the jpackage tool introduced in Java 14.
https://akman.github.io/jpackage-maven-plugin
Apache License 2.0
46 stars 9 forks source link

Non modular app #3

Open mrlimbic opened 3 years ago

mrlimbic commented 3 years ago

I'm trying to port a non modular app that was originally built using Java 8 and packaged with javafx-maven-plugin.

I have now got the app to compile & run using Java 15 and want to package it using jpackage-maven-plugin.

Using jpackage from the command line there is a way to package a non modular app which worked.

For a non-modular application:
    jpackage -i inputDir -n name \
        --main-class className --main-jar myJar.jar

I tried doing this through the jpackage-maven-plugin plugin like this but not sure how you are supposed to do it.

                          <!-- Not yet a modular app -->
                          <main-jar>Vordio.jar</main-jar>
                          <main-class>net.vordio.ui.VordoApp</main-class>

What is the correct way?

Maurice-Betzel commented 2 years ago

Take a look at the faq for setting up the right Params.

mrlimbic commented 2 years ago

I ended up calling jpackage executable directly.

BTW It turns out that the disk image is broken on mac unless using latest java 18. There was a bug in jpackage that prevented signing apps that had some components already signed. So a signed jdk was preventing it working!

fabriciorsf commented 1 year ago

For me, the configuration below doesn't work:

<plugin>
  <groupId>com.github.akman</groupId>
  <artifactId>jpackage-maven-plugin</artifactId>
  <version>0.1.5</version>
  <executions>
     <execution>
        <phase>verify</phase>
        <goals>
           <goal>jpackage</goal>
        </goals>
        <configuration>
           <input>${project.build.directory}</input>
           <mainjar>${project.build.finalName}.jar</mainjar>
        </configuration>
     </execution>
  </executions>
</plugin>

Follow the build log from the verify phase:

Apache Maven 3.9.2 (c9616018c7a021c1c39be70fb2843d6f5f9b8a1c)
Maven home: C:\Programs\apache-maven
Java version: 20.0.1, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk-20
Default locale: pt_BR, platform encoding: UTF-8
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
[DEBUG] ...
...
[INFO] --- jpackage:0.1.5:jpackage (default) @ my-project ---
[DEBUG] Using mirror maven-default-http-blocker (http://0.0.0.0/) for ow2-snapshot (http://repository.ow2.org/nexus/content/repositories/snapshots).
[DEBUG] Dependency collection stats {ConflictMarker.analyzeTime=74800, ConflictMarker.markTime=59000, ConflictMarker.nodeCount=9, ConflictIdSorter.graphTime=36500, ConflictIdSorter.topsortTime=18800, ConflictIdSorter.conflictIdCount=9, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=258700, ConflictResolver.conflictItemCount=9, DfDependencyCollector.collectTime=64693300, DfDependencyCollector.transformTime=474000}
[DEBUG] com.github.akman:jpackage-maven-plugin:jar:0.1.5
[DEBUG]    org.apache.maven.shared:file-management:jar:3.1.0:compile
[DEBUG]       org.slf4j:slf4j-api:jar:1.7.36:compile
[DEBUG]       org.codehaus.plexus:plexus-utils:jar:3.4.2:compile
[DEBUG]       commons-io:commons-io:jar:2.11.0:compile
[DEBUG]    org.codehaus.plexus:plexus-java:jar:1.1.1:compile
[DEBUG]       org.ow2.asm:asm:jar:9.2:compile
[DEBUG]       com.thoughtworks.qdox:qdox:jar:2.0.1:compile
[DEBUG]    org.apache.commons:commons-lang3:jar:3.12.0:compile
[DEBUG] Created new class realm plugin>com.github.akman:jpackage-maven-plugin:0.1.5
[DEBUG] Importing foreign packages into class realm plugin>com.github.akman:jpackage-maven-plugin:0.1.5
[DEBUG]   Imported:  < maven.api
[DEBUG] Populating class realm plugin>com.github.akman:jpackage-maven-plugin:0.1.5
[DEBUG]   Included: com.github.akman:jpackage-maven-plugin:jar:0.1.5
[DEBUG]   Included: org.apache.maven.shared:file-management:jar:3.1.0
[DEBUG]   Included: org.codehaus.plexus:plexus-utils:jar:3.4.2
[DEBUG]   Included: commons-io:commons-io:jar:2.11.0
[DEBUG]   Included: org.codehaus.plexus:plexus-java:jar:1.1.1
[DEBUG]   Included: org.ow2.asm:asm:jar:9.2
[DEBUG]   Included: com.thoughtworks.qdox:qdox:jar:2.0.1
[DEBUG]   Included: org.apache.commons:commons-lang3:jar:3.12.0
[DEBUG] Loading mojo com.github.akman:jpackage-maven-plugin:0.1.5:jpackage from plugin realm ClassRealm[plugin>com.github.akman:jpackage-maven-plugin:0.1.5, parent: jdk.internal.loader.ClassLoaders$AppClassLoader@33909752]
[DEBUG] Configuring mojo execution 'com.github.akman:jpackage-maven-plugin:0.1.5:jpackage:default' with basic configurator -->
[DEBUG]   (f) bindservices = false
[DEBUG]   (f) dest = C:\User\myusr\workspace\my-project\target\jpackage
[DEBUG]   (f) input = C:\User\myusr\workspace\my-project\target
[DEBUG]   (f) mainjar = my-project-1.0-SNAPSHOT.jar
[DEBUG]   (f) project = MavenProject: net.mydomain:my-project:1.0-SNAPSHOT @ C:\User\myusr\workspace\my-project\pom.xml
[DEBUG]   (f) session = org.apache.maven.execution.MavenSession@53f4c1e6
[DEBUG]   (f) type = PLATFORM
[DEBUG]   (f) verbose = false
[DEBUG]   (f) winconsole = false
[DEBUG]   (f) windirchooser = false
[DEBUG]   (f) winmenu = false
[DEBUG]   (f) winperuserinstall = false
[DEBUG]   (f) winshortcut = false
[DEBUG] -- end configuration --
[DEBUG] Using source encoding: [UTF-8] to write files
[DEBUG] Toolchain not specified
[DEBUG] Executable (toolhome) for [jpackage] not found
[DEBUG] Executable (toolchain) for [jpackage] not found
[DEBUG] Executable (javahome) for [jpackage]: C:\Program Files\Java\jdk-20\bin\jpackage.exe
[DEBUG] Home directory (javahome) for [jpackage]: C:\Program Files\Java\jdk-20
[DEBUG] cmd.exe /X /C ""C:\Program Files\Java\jdk-20\bin\jpackage.exe" --version"
[DEBUG] 
20.0.1

[INFO] Version of [jpackage]: 20.0.1
[DEBUG] Version (corresponding java version) of [jpackage]: 20.0
[DEBUG] ARTIFACTS

[ compile ] org.apache.logging.log4j:log4j-api:2.20.0 - log4j-api-2.20.0.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.apache.logging.log4j:log4j-core:2.20.0 - log4j-core-2.20.0.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.openjfx:javafx-controls:20.0.1 - javafx-controls-20.0.1.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.openjfx:javafx-controls:20.0.1 - javafx-controls-20.0.1-win.jar
  type: jar
  classifier: win
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.openjfx:javafx-graphics:20.0.1 - javafx-graphics-20.0.1.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.openjfx:javafx-graphics:20.0.1 - javafx-graphics-20.0.1-win.jar
  type: jar
  classifier: win
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.openjfx:javafx-base:20.0.1 - javafx-base-20.0.1.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.openjfx:javafx-base:20.0.1 - javafx-base-20.0.1-win.jar
  type: jar
  classifier: win
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.openjfx:javafx-fxml:20.0.1 - javafx-fxml-20.0.1.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.openjfx:javafx-fxml:20.0.1 - javafx-fxml-20.0.1-win.jar
  type: jar
  classifier: win
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] jakarta.persistence:jakarta.persistence-api:3.1.0 - jakarta.persistence-api-3.1.0.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] jakarta.enterprise:jakarta.enterprise.cdi-api:4.0.1 - jakarta.enterprise.cdi-api-4.0.1.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] jakarta.enterprise:jakarta.enterprise.lang-model:4.0.1 - jakarta.enterprise.lang-model-4.0.1.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] jakarta.annotation:jakarta.annotation-api:2.1.0 - jakarta.annotation-api-2.1.0.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] jakarta.el:jakarta.el-api:5.0.0 - jakarta.el-api-5.0.0.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] jakarta.interceptor:jakarta.interceptor-api:2.1.0 - jakarta.interceptor-api-2.1.0.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] jakarta.inject:jakarta.inject-api:2.0.1 - jakarta.inject-api-2.0.1.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.jboss.weld.se:weld-se-shaded:5.1.0.Final - weld-se-shaded-5.1.0.Final.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.hibernate:hibernate-entitymanager:5.6.15.Final - hibernate-entitymanager-5.6.15.Final.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.jboss.logging:jboss-logging:3.4.3.Final - jboss-logging-3.4.3.Final.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.hibernate:hibernate-core:5.6.15.Final - hibernate-core-5.6.15.Final.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] antlr:antlr:2.7.7 - antlr-2.7.7.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.jboss:jandex:2.4.2.Final - jandex-2.4.2.Final.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] com.fasterxml:classmate:1.5.1 - classmate-1.5.1.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] javax.activation:javax.activation-api:1.2.0 - javax.activation-api-1.2.0.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] javax.xml.bind:jaxb-api:2.3.1 - jaxb-api-2.3.1.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.glassfish.jaxb:jaxb-runtime:2.3.1 - jaxb-runtime-2.3.1.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.glassfish.jaxb:txw2:2.3.1 - txw2-2.3.1.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] com.sun.istack:istack-commons-runtime:3.0.7 - istack-commons-runtime-3.0.7.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.jvnet.staxex:stax-ex:1.8 - stax-ex-1.8.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] com.sun.xml.fastinfoset:FastInfoset:1.2.15 - FastInfoset-1.2.15.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.hibernate.common:hibernate-commons-annotations:5.1.2.Final - hibernate-commons-annotations-5.1.2.Final.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] javax.persistence:javax.persistence-api:2.2 - javax.persistence-api-2.2.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] net.bytebuddy:byte-buddy:1.12.18 - byte-buddy-1.12.18.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.1.1.Final - jboss-transaction-api_1.2_spec-1.1.1.Final.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.hibernate:hibernate-c3p0:5.6.15.Final - hibernate-c3p0-5.6.15.Final.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] com.mchange:c3p0:0.9.5.5 - c3p0-0.9.5.5.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] com.mchange:mchange-commons-java:0.2.19 - mchange-commons-java-0.2.19.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] com.mysql:mysql-connector-j:8.0.33 - mysql-connector-j-8.0.33.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] com.google.protobuf:protobuf-java:3.21.9 - protobuf-java-3.21.9.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.postgresql:postgresql:42.6.0 - postgresql-42.6.0.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ runtime ] org.checkerframework:checker-qual:3.31.0 - checker-qual-3.31.0.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.xerial:sqlite-jdbc:3.42.0.0 - sqlite-jdbc-3.42.0.0.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] com.zsoltfabok:sqlite-dialect:1.0 - sqlite-dialect-1.0.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.apache.derby:derby:10.16.1.1 - derby-10.16.1.1.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] org.apache.derby:derbyshared:10.16.1.1 - derbyshared-10.16.1.1.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[ compile ] com.google.code.gson:gson:2.10.1 - gson-2.10.1.jar
  type: jar
  classifier: null
  optional: false
  release: false
  snapshot: false
  resolved: true

[WARNING] The main module descriptor not found
[DEBUG] 
# jpackage
--dest C:\User\myusr\workspace\my-project\target\jpackage
--input C:\User\myusr\workspace\my-project\target
--main-jar 'my-project-1.0-SNAPSHOT.jar'
[DEBUG] cmd.exe /X /C ""C:\Program Files\Java\jdk-20\bin\jpackage.exe" "@C:\User\myusr\workspace\my-project\target\jpackage.opts""
[ERROR] 
Exit code: 1
[ERROR]
Command line was: cmd.exe /X /C ""C:\Program Files\Java\jdk-20\bin\jpackage.exe" "@C:\User\myusr\workspace\my-project\target\jpackage.opts""
[ERROR] 
Command options was:
# jpackage
--dest C:\User\myusr\workspace\my-project\target\jpackage
--input C:\User\myusr\workspace\my-project\target
--main-jar 'my-project-1.0-SNAPSHOT.jar'
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  18.936 s
[INFO] Finished at: 2023-05-25T02:44:57-03:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.github.akman:jpackage-maven-plugin:0.1.5:jpackage (default) on project my-project: Error: Tool execution failed [jpackage] with exit code: 1 -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal com.github.akman:jpackage-maven-plugin:0.1.5:jpackage (default) on project my-project: Error: Tool execution failed [jpackage] with exit code: 1
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:347)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:330)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:213)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:175)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:76)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:163)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:160)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:910)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
    at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:104)
    at java.lang.reflect.Method.invoke (Method.java:578)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:283)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:226)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:407)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:348)
Caused by: org.apache.maven.plugin.MojoExecutionException: Error: Tool execution failed [jpackage] with exit code: 1
    at ru.akman.maven.plugins.jpackage.JPackageMojo.execute (JPackageMojo.java:1938)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:342)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:330)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:213)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:175)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:76)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:163)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:160)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:910)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
    at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:104)
    at java.lang.reflect.Method.invoke (Method.java:578)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:283)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:226)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:407)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:348)
[ERROR]
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[DEBUG] Shutting down adapter factory; available factories [file-lock, rwlock-local, semaphore-local, noop]; available name mappers [discriminating, file-gav, file-hgav, file-static, gav, static]
[DEBUG] Shutting down 'file-lock' factory
[DEBUG] Shutting down 'rwlock-local' factory
[DEBUG] Shutting down 'semaphore-local' factory
[DEBUG] Shutting down 'noop' factory
odinsbane commented 2 months ago

@fabriciorsf One problem you're having is your destination is in a subfolder of your input. That causes an infinite recursion in jpackage. Also, it tells you the actual jpackage command executed. I found it easier to get jpackage to work without the plugin, then I think you can go back to the maven plugin with the correct settings.