From 34d744196f048d3021720d0a93a22d7ec9a786ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Kohlschu=CC=88tter?= Date: Tue, 5 Mar 2024 21:24:17 +0100 Subject: [PATCH] demo: Add junixsocket-demo-jpackagejlink Demonstrates how to use jlink/jpackage with junixsocket. https://github.com/kohlschutter/junixsocket/issues/153 --- junixsocket-demo-jpackagejlink/README.md | 53 +++++ junixsocket-demo-jpackagejlink/pom.xml | 206 ++++++++++++++++++ .../src/main/java/module-info.java | 11 + .../demo/jpackagejlink/DemoMainClass.java | 41 ++++ pom.xml | 1 + 5 files changed, 312 insertions(+) create mode 100644 junixsocket-demo-jpackagejlink/README.md create mode 100644 junixsocket-demo-jpackagejlink/pom.xml create mode 100644 junixsocket-demo-jpackagejlink/src/main/java/module-info.java create mode 100644 junixsocket-demo-jpackagejlink/src/main/java/org/newsclub/net/unix/demo/jpackagejlink/DemoMainClass.java diff --git a/junixsocket-demo-jpackagejlink/README.md b/junixsocket-demo-jpackagejlink/README.md new file mode 100644 index 000000000..1d3692fc2 --- /dev/null +++ b/junixsocket-demo-jpackagejlink/README.md @@ -0,0 +1,53 @@ +# junixsocket-demo-jpackagejlink + +Example code to demonstrate how to use junixsocket with jlink and jpackage. + +## Definitions + +### jlink + +jlink builds Java runtime images that are tailored towards a specific set of Java classes / modules. + +jlink was introduced in Java 9. + +### jpackage + +jpackage builds native installers for applications, utilizing optimized runtimes very much like jlink. + +jpackage was introduced in Java 14. + +## The demo code + +This demo simply runs a very simple selftest built into junixsocket-common. + +It depends on `junixsocket-core`, which is a POM-only dependency that in turn references +`junixsocket-common` (the common junixsocket API) and `junixsocket-native-common` (the +native library images for common operating systems). + +## Build instructions + +The main purpose of this Maven module is to demonstrate how to configure a project's `pom.xml` file +such that jlink/jpackage-compatible artifacts can be created. + +By default, this demo does not create executable jlink/jpackage artifacts. +You have to invoke the `mvn` command with a given profile setting to enable them: + + cd junixsocket-demo-jpackagejlink + mvn clean verify -Djpackage -Djlink + +Omit either `-Djpackage` or `-Djlink` if desired. + +See the [junixsocket-demo-jpackagejlink POM file](pom.xml) for how this is done. + +## Results + +See `junixsocket-demo-jpackagejlink/target/jpackage` for the binary package result (the actual file +depends on your target platform). + +See `junixsocket-demo-jpackagejlink/target/jlink/image` for the Java runtime optimized for the demo +code. + +## References + +* [Tools Reference: jlink](https://docs.oracle.com/en/java/javase/11/tools/jlink.html) +* [Tools Reference: jpackage](https://docs.oracle.com/en/java/javase/14/docs/specs/man/jpackage.html) diff --git a/junixsocket-demo-jpackagejlink/pom.xml b/junixsocket-demo-jpackagejlink/pom.xml new file mode 100644 index 000000000..df9c504e2 --- /dev/null +++ b/junixsocket-demo-jpackagejlink/pom.xml @@ -0,0 +1,206 @@ + + + 4.0.0 + junixsocket-demo-jpackagejlink + jar + + com.kohlschutter.junixsocket + junixsocket + 2.9.1-SNAPSHOT + ../pom.xml + + junixsocket-demo-jpackagejlink + + ${project.parent.basedir} + org.newsclub.net.unix.demo.jpackagejlink.DemoMainClass + + + junixsocket jpackage/jlink demo setup + + + + jpackage + + + jpackage + + + + + + maven-resources-plugin + + + jpackage-copy-main-jar + verify + + copy-resources + + + + ${project.build.directory}/jpackage-app + + + + ${project.build.directory} + + + ${project.name}-${project.version}.jar + + + + + + + + + com.github.akman + jpackage-maven-plugin + + + verify + + jpackage + + + + ${mainClass} + PLATFORM + + + + + true + false + + glob:**/*.jar + + + + + + java.base + + org.newsclub.net.unix + + + com.kohlschutter.junixsocket.nativecommon + + + org.newsclub.net.unix.demo.jpackagejlink + + + ${project.build.directory}/jpackage-app + + ${project.name}-${project.version}.jar + + + + + + + + + + com.github.akman + jpackage-maven-plugin + 0.1.5 + + + + + + + + jlink + + + jlink + + + + + + com.github.akman + jlink-maven-plugin + + + verify + + jlink + + + + junixsocket-jlink-demo + + org.newsclub.net.unix.demo.jpackagejlink + + ${mainClass} + + + + + + true + false + + glob:**/*.jar + + + + + + java.base + + org.newsclub.net.unix + + + com.kohlschutter.junixsocket.nativecommon + + + org.newsclub.net.unix.demo.jpackagejlink + + + + + + + + + + + com.github.akman + jlink-maven-plugin + 0.1.11 + + + + + + + + + + sonatype.snapshots + Sonatype snapshot repository + https://oss.sonatype.org/content/repositories/snapshots/ + default + + true + + + + + + + com.kohlschutter.junixsocket + junixsocket-core + ${project.version} + pom + + + diff --git a/junixsocket-demo-jpackagejlink/src/main/java/module-info.java b/junixsocket-demo-jpackagejlink/src/main/java/module-info.java new file mode 100644 index 000000000..e8cd1060a --- /dev/null +++ b/junixsocket-demo-jpackagejlink/src/main/java/module-info.java @@ -0,0 +1,11 @@ +/** + * jpackage/jlink demo module + */ +module org.newsclub.net.unix.demo.jpackagejlink { + exports org.newsclub.net.unix.demo.jpackagejlink; + + requires java.base; + + requires org.newsclub.net.unix; + requires com.kohlschutter.junixsocket.nativecommon; +} diff --git a/junixsocket-demo-jpackagejlink/src/main/java/org/newsclub/net/unix/demo/jpackagejlink/DemoMainClass.java b/junixsocket-demo-jpackagejlink/src/main/java/org/newsclub/net/unix/demo/jpackagejlink/DemoMainClass.java new file mode 100644 index 000000000..cb27a3b9e --- /dev/null +++ b/junixsocket-demo-jpackagejlink/src/main/java/org/newsclub/net/unix/demo/jpackagejlink/DemoMainClass.java @@ -0,0 +1,41 @@ +/* + * junixsocket + * + * Copyright 2009-2023 Christian Kohlschütter + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.newsclub.net.unix.demo.jpackagejlink; + +import org.newsclub.net.unix.AFUNIXSocket; + +/** + * The entrypoint class for the jpackage or jlink demo binary. + * + * @author Christian Kohlschütter + */ +public final class DemoMainClass { + + private DemoMainClass() { + } + + /** + * The entrypoint method for the jpackage or jlink demo binary. + * + * @param args The program arguments. + */ + public static void main(String[] args) { + // run a simple built-in selftest + AFUNIXSocket.main(new String[0]); + } +} diff --git a/pom.xml b/pom.xml index b9d2fe24a..bd02e5de2 100644 --- a/pom.xml +++ b/pom.xml @@ -92,6 +92,7 @@ In contrast to other implementations, junixsocket extends the Java Sockets API ( junixsocket-mysql junixsocket-core junixsocket-demo + junixsocket-demo-jpackagejlink junixsocket-dist junixsocket-codecoverage