AWT names the X11 window class after the thread that first touched the toolkit, so the client shared java-awt-EventDispatchThread with every other Swing app. Set it to ts3j-client instead (the jar's manifest opens the AWT internals this needs), and install a matching .desktop launcher and icon in the user's data directory: without a launcher claiming the class, Plasma falls back to the process's command line and files the window under Java. The window icon is now offered at several sizes instead of 16 px only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
158 lines
7.4 KiB
XML
158 lines
7.4 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
<modelVersion>4.0.0</modelVersion>
|
|
|
|
<parent>
|
|
<groupId>com.ts3client</groupId>
|
|
<artifactId>ts3-client-parent</artifactId>
|
|
<version>0.1.0</version>
|
|
</parent>
|
|
|
|
<artifactId>ts3-client-swing</artifactId>
|
|
<name>TS3J Client Swing Frontend</name>
|
|
<description>Swing desktop UI</description>
|
|
|
|
<properties>
|
|
<exec.mainClass>com.ts3client.Main</exec.mainClass>
|
|
</properties>
|
|
|
|
<dependencies>
|
|
<dependency>
|
|
<groupId>com.ts3client</groupId>
|
|
<artifactId>ts3-client-core</artifactId>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>com.ts3client</groupId>
|
|
<artifactId>ts3-client-desktop</artifactId>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>com.github.manevolent</groupId>
|
|
<artifactId>ts3j</artifactId>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>com.github.weisj</groupId>
|
|
<artifactId>jsvg</artifactId>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>com.formdev</groupId>
|
|
<artifactId>flatlaf</artifactId>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.junit.jupiter</groupId>
|
|
<artifactId>junit-jupiter</artifactId>
|
|
<version>5.13.4</version>
|
|
<scope>test</scope>
|
|
</dependency>
|
|
</dependencies>
|
|
|
|
<build>
|
|
<finalName>ts3-client</finalName>
|
|
<plugins>
|
|
<!--
|
|
The shade plugin replaces ts3-client.jar with the shaded jar. Without
|
|
forceCreation, a build where this module's classes did not change keeps
|
|
that shaded jar as the input to the next shade, and the stale copies of
|
|
the dependencies inside it (ts3j in particular) win over the fresh ones.
|
|
-->
|
|
<plugin>
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
<artifactId>maven-jar-plugin</artifactId>
|
|
<configuration>
|
|
<forceCreation>true</forceCreation>
|
|
</configuration>
|
|
</plugin>
|
|
<plugin>
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
<artifactId>maven-shade-plugin</artifactId>
|
|
<version>3.6.2</version>
|
|
<executions>
|
|
<execution>
|
|
<phase>package</phase>
|
|
<goals>
|
|
<goal>shade</goal>
|
|
</goals>
|
|
<configuration>
|
|
<!--
|
|
Tree-shake the dependencies: only a fraction of Bouncy Castle
|
|
(the lightweight EC/AES-EAX API) is actually reachable.
|
|
-->
|
|
<minimizeJar>true</minimizeJar>
|
|
<filters>
|
|
<!-- Our own modules are entry points; keep them whole. -->
|
|
<filter>
|
|
<artifact>com.ts3client:*</artifact>
|
|
<includes>
|
|
<include>**</include>
|
|
</includes>
|
|
</filter>
|
|
<filter>
|
|
<artifact>com.github.manevolent:ts3j</artifact>
|
|
<includes>
|
|
<include>**</include>
|
|
</includes>
|
|
</filter>
|
|
<!-- JSVG resolves its node types by service loader/reflection,
|
|
which minimizeJar cannot follow. -->
|
|
<filter>
|
|
<artifact>com.github.weisj:jsvg</artifact>
|
|
<includes>
|
|
<include>**</include>
|
|
</includes>
|
|
</filter>
|
|
<!-- FlatLaf instantiates its UI delegates by name and reads its
|
|
themes from .properties resources; neither is reachable
|
|
statically, so minimizeJar must not touch it. -->
|
|
<filter>
|
|
<artifact>com.formdev:flatlaf</artifact>
|
|
<includes>
|
|
<include>**</include>
|
|
</includes>
|
|
</filter>
|
|
<filter>
|
|
<artifact>*:*</artifact>
|
|
<excludes>
|
|
<!--
|
|
The shaded jar is not a multi-release jar, so the
|
|
versioned copies (all Bouncy Castle's) are never loaded,
|
|
and minimizeJar does not tree-shake them either.
|
|
-->
|
|
<exclude>META-INF/versions/**</exclude>
|
|
<exclude>META-INF/*.SF</exclude>
|
|
<exclude>META-INF/*.DSA</exclude>
|
|
<exclude>META-INF/*.RSA</exclude>
|
|
<exclude>module-info.class</exclude>
|
|
</excludes>
|
|
</filter>
|
|
</filters>
|
|
<transformers>
|
|
<transformer
|
|
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
|
|
<mainClass>com.ts3client.Main</mainClass>
|
|
<manifestEntries>
|
|
<Enable-Native-Access>ALL-UNNAMED</Enable-Native-Access>
|
|
<Add-Opens>java.desktop/sun.awt.X11</Add-Opens>
|
|
</manifestEntries>
|
|
</transformer>
|
|
<!-- Merge overlapping META-INF/services entries (e.g. java.security.Provider)
|
|
instead of letting one dependency's file overwrite another's. -->
|
|
<transformer
|
|
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
|
|
</transformers>
|
|
</configuration>
|
|
</execution>
|
|
</executions>
|
|
</plugin>
|
|
<plugin>
|
|
<groupId>org.codehaus.mojo</groupId>
|
|
<artifactId>exec-maven-plugin</artifactId>
|
|
<version>3.1.0</version>
|
|
<configuration>
|
|
<mainClass>com.ts3client.Main</mainClass>
|
|
</configuration>
|
|
</plugin>
|
|
</plugins>
|
|
</build>
|
|
</project>
|