mirror of
https://github.com/praktimarc/kst4contest.git
synced 2026-09-11 11:45:27 +02:00
Session-based ON4KST connection lifecycle: Each socket, reader, writer, message bus and queue now belongs to an explicitly identified connection session. Delayed threads from an obsolete connection can therefore no longer process data or close its replacement. ONLINE is reported only after the login has been accepted and all requested user lists have been received. Connection setup, login and synchronisation use bounded timeouts, while heartbeats, missing inbound traffic, EOF and read or write failures trigger controlled reconnect attempts with backoff where appropriate. Validated ON4KST protocol commands: Outgoing frames are built centrally and checked for valid categories, locators and prohibited frame delimiters. Because ON4KST maintains one locator per TCP session, the main locator is used for both chat categories and a conflicting secondary configuration is logged instead of sending contradictory commands to the server.
469 lines
19 KiB
XML
469 lines
19 KiB
XML
<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/maven-v4_0_0.xsd">
|
|
|
|
<modelVersion>4.0.0</modelVersion>
|
|
|
|
<groupId>de.x08</groupId>
|
|
<artifactId>praktiKST</artifactId>
|
|
<version>1.42.0-nightly</version>
|
|
|
|
<name>praktiKST</name>
|
|
|
|
<organization>
|
|
<name>DO5AMF</name>
|
|
</organization>
|
|
|
|
<url>http://www.x08.de</url>
|
|
|
|
<packaging>jar</packaging>
|
|
|
|
<properties>
|
|
<!-- Application Properties -->
|
|
<link.name>${project.artifactId}</link.name>
|
|
<launcher>${project.artifactId}</launcher>
|
|
<appName>${project.artifactId}</appName>
|
|
<main.class>kst4contest.view.Kst4ContestApplication</main.class>
|
|
<java.version>21</java.version>
|
|
<required.maven.version>3.6.3</required.maven.version>
|
|
<jar.filename>${project.artifactId}-${project.version}</jar.filename>
|
|
|
|
<!-- Dependency versions -->
|
|
<javafx.version>21.0.5</javafx.version>
|
|
<jetbrains.annotations.version>24.0.1</jetbrains.annotations.version>
|
|
<junit.version>5.10.1</junit.version>
|
|
<lombok.version>1.18.44</lombok.version>
|
|
<mockito.version>5.7.0</mockito.version>
|
|
<sqlite.version>3.43.2.2</sqlite.version>
|
|
|
|
<!-- Plugin dependencies -->
|
|
<maven.clean.plugin>3.3.2</maven.clean.plugin>
|
|
<maven.compiler.plugin>3.11.0</maven.compiler.plugin>
|
|
<maven.dependency.plugin>3.3.0</maven.dependency.plugin>
|
|
<maven.deploy.plugin>3.1.1</maven.deploy.plugin>
|
|
<maven.enforcer.plugin>3.4.1</maven.enforcer.plugin>
|
|
<maven.install.plugin>3.1.1</maven.install.plugin>
|
|
<maven.jar.plugin>3.3.0</maven.jar.plugin>
|
|
<maven.resources.plugin>3.3.1</maven.resources.plugin>
|
|
<maven.site.plugin>4.0.0-M11</maven.site.plugin>
|
|
<maven.surfire.plugin>3.2.2</maven.surfire.plugin>
|
|
<maven.wrapper.plugin>3.2.0</maven.wrapper.plugin>
|
|
<moditect.maven.plugin>1.0.0.RC2</moditect.maven.plugin>
|
|
<jpackage.maven.plugin>0.1.3</jpackage.maven.plugin>
|
|
<maven.pmd.version>3.28.0</maven.pmd.version>
|
|
<pmd.version>7.17.0</pmd.version>
|
|
<codehaus.version.plugin>2.16.1</codehaus.version.plugin>
|
|
<javafx.maven.plugin>0.0.8</javafx.maven.plugin>
|
|
<spotbugs.maven.plugin>4.9.8.2</spotbugs.maven.plugin>
|
|
<spotbugs.version>4.9.8</spotbugs.version>
|
|
|
|
<!-- other properties -->
|
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
<maven.compiler.source>${java.version}</maven.compiler.source>
|
|
<maven.compiler.target>${java.version}</maven.compiler.target>
|
|
<maven.compiler.release>${java.version}</maven.compiler.release>
|
|
<maven.plugin.validation>VERBOSE</maven.plugin.validation>
|
|
</properties>
|
|
|
|
<dependencies>
|
|
<!-- JavaFX dependencies -->
|
|
<dependency>
|
|
<groupId>org.openjfx</groupId>
|
|
<artifactId>javafx-controls</artifactId>
|
|
<version>${javafx.version}</version>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.openjfx</groupId>
|
|
<artifactId>javafx-graphics</artifactId>
|
|
<version>${javafx.version}</version>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.openjfx</groupId>
|
|
<artifactId>javafx-fxml</artifactId>
|
|
<version>${javafx.version}</version>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.openjfx</groupId>
|
|
<artifactId>javafx-web</artifactId>
|
|
<version>${javafx.version}</version>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.openjfx</groupId>
|
|
<artifactId>javafx-media</artifactId>
|
|
<version>${javafx.version}</version>
|
|
</dependency>
|
|
|
|
<!-- JLayer: pure-Java MP3 decoder, used instead of JavaFX Media for Flatpak audio compatibility -->
|
|
<dependency>
|
|
<groupId>javazoom</groupId>
|
|
<artifactId>jlayer</artifactId>
|
|
<version>1.0.1</version>
|
|
</dependency>
|
|
|
|
<!-- SQLite -->
|
|
<dependency>
|
|
<groupId>org.xerial</groupId>
|
|
<artifactId>sqlite-jdbc</artifactId>
|
|
<version>${sqlite.version}</version>
|
|
</dependency>
|
|
|
|
<!-- Lombok -->
|
|
<dependency>
|
|
<groupId>org.projectlombok</groupId>
|
|
<artifactId>lombok</artifactId>
|
|
<version>${lombok.version}</version>
|
|
<scope>provided</scope>
|
|
</dependency>
|
|
|
|
<!-- JUnit 5 -->
|
|
<dependency>
|
|
<groupId>org.junit.jupiter</groupId>
|
|
<artifactId>junit-jupiter-engine</artifactId>
|
|
<version>${junit.version}</version>
|
|
<scope>test</scope>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.junit.jupiter</groupId>
|
|
<artifactId>junit-jupiter-params</artifactId>
|
|
<version>${junit.version}</version>
|
|
<scope>test</scope>
|
|
</dependency>
|
|
|
|
<!-- Mockito -->
|
|
<dependency>
|
|
<groupId>org.mockito</groupId>
|
|
<artifactId>mockito-core</artifactId>
|
|
<version>${mockito.version}</version>
|
|
<scope>test</scope>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.mockito</groupId>
|
|
<artifactId>mockito-junit-jupiter</artifactId>
|
|
<version>${mockito.version}</version>
|
|
<scope>test</scope>
|
|
</dependency>
|
|
|
|
<!-- Dependency used for @NotNull / @Nullable -->
|
|
<dependency>
|
|
<groupId>org.jetbrains</groupId>
|
|
<artifactId>annotations</artifactId>
|
|
<version>${jetbrains.annotations.version}</version>
|
|
<scope>compile</scope>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.junit.jupiter</groupId>
|
|
<artifactId>junit-jupiter-api</artifactId>
|
|
<version>${junit.version}</version>
|
|
<scope>compile</scope>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.mockito</groupId>
|
|
<artifactId>mockito-core</artifactId>
|
|
<version>5.17.0</version>
|
|
<scope>compile</scope>
|
|
</dependency>
|
|
|
|
<!--
|
|
<dependency>
|
|
<groupId>xml-apis</groupId>
|
|
<artifactId>xml-apis</artifactId>
|
|
<version>2.0.2</version>
|
|
</dependency>
|
|
|
|
<dependency>
|
|
<groupId>javax.xml.parsers</groupId>
|
|
<artifactId>jaxp-api</artifactId>
|
|
<version>1.4.5</version>
|
|
</dependency>
|
|
-->
|
|
|
|
</dependencies>
|
|
|
|
<build>
|
|
<finalName>${jar.filename}</finalName>
|
|
<plugins>
|
|
<plugin>
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
<artifactId>maven-wrapper-plugin</artifactId>
|
|
<version>${maven.wrapper.plugin}</version>
|
|
</plugin>
|
|
<plugin>
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
<artifactId>maven-enforcer-plugin</artifactId>
|
|
<version>${maven.enforcer.plugin}</version>
|
|
<executions>
|
|
<execution>
|
|
<id>enforce-versions</id>
|
|
<goals>
|
|
<goal>enforce</goal>
|
|
</goals>
|
|
<configuration>
|
|
<rules>
|
|
<requireMavenVersion>
|
|
<version>${required.maven.version}</version>
|
|
</requireMavenVersion>
|
|
</rules>
|
|
</configuration>
|
|
</execution>
|
|
</executions>
|
|
</plugin>
|
|
|
|
<plugin>
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
<artifactId>maven-compiler-plugin</artifactId>
|
|
<version>${maven.compiler.plugin}</version>
|
|
<configuration>
|
|
<release>${java.version}</release>
|
|
<annotationProcessorPaths>
|
|
<path>
|
|
<groupId>org.projectlombok</groupId>
|
|
<artifactId>lombok</artifactId>
|
|
<version>${lombok.version}</version>
|
|
</path>
|
|
</annotationProcessorPaths>
|
|
</configuration>
|
|
</plugin>
|
|
|
|
<plugin>
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
<artifactId>maven-clean-plugin</artifactId>
|
|
<version>${maven.clean.plugin}</version>
|
|
</plugin>
|
|
|
|
<plugin>
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
<artifactId>maven-deploy-plugin</artifactId>
|
|
<version>${maven.deploy.plugin}</version>
|
|
</plugin>
|
|
|
|
<plugin>
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
<artifactId>maven-install-plugin</artifactId>
|
|
<version>${maven.install.plugin}</version>
|
|
</plugin>
|
|
|
|
<plugin>
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
<artifactId>maven-jar-plugin</artifactId>
|
|
<version>${maven.jar.plugin}</version>
|
|
</plugin>
|
|
|
|
<plugin>
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
<artifactId>maven-resources-plugin</artifactId>
|
|
<version>${maven.resources.plugin}</version>
|
|
</plugin>
|
|
|
|
<plugin>
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
<artifactId>maven-site-plugin</artifactId>
|
|
<version>${maven.site.plugin}</version>
|
|
</plugin>
|
|
|
|
<plugin>
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
<artifactId>maven-surefire-plugin</artifactId>
|
|
<version>${maven.surfire.plugin}</version>
|
|
<configuration>
|
|
<testFailureIgnore>true</testFailureIgnore>
|
|
<!--
|
|
Without this, Surefire's automatic module-path detection splits the
|
|
JUnit Platform jars across classpath and module-path inconsistently
|
|
(module org.junit.platform.commons ends up loaded while a class from
|
|
junit-platform-engine stays in the unnamed module), which fails with
|
|
an IllegalAccessError before any test can run. The project itself has
|
|
no module-info.java, so plain classpath execution is correct here.
|
|
-->
|
|
<useModulePath>false</useModulePath>
|
|
</configuration>
|
|
</plugin>
|
|
|
|
<plugin>
|
|
<groupId>com.github.spotbugs</groupId>
|
|
<artifactId>spotbugs-maven-plugin</artifactId>
|
|
<version>${spotbugs.maven.plugin}</version>
|
|
<dependencies>
|
|
<!-- overwrite dependency on spotbugs if you want to specify the version of spotbugs -->
|
|
<dependency>
|
|
<groupId>com.github.spotbugs</groupId>
|
|
<artifactId>spotbugs</artifactId>
|
|
<version>${spotbugs.version}</version>
|
|
</dependency>
|
|
</dependencies>
|
|
<executions>
|
|
<execution>
|
|
<phase>prepare-package</phase>
|
|
<goals>
|
|
<!-- spotbugs does not stop build when violations are found -->
|
|
<goal>spotbugs</goal>
|
|
|
|
<!-- check stops the build when violations are found -->
|
|
<!-- <goal>check</goal> -->
|
|
</goals>
|
|
</execution>
|
|
</executions>
|
|
</plugin>
|
|
|
|
<plugin>
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
<artifactId>maven-pmd-plugin</artifactId>
|
|
<version>${maven.pmd.version}</version>
|
|
<configuration>
|
|
<minimumTokens>100</minimumTokens>
|
|
<targetJdk>${java.version}</targetJdk>
|
|
<linkXRef>false</linkXRef>
|
|
<rulesets>
|
|
<ruleset>pmd-ruleset.xml</ruleset>
|
|
</rulesets>
|
|
</configuration>
|
|
<executions>
|
|
<execution>
|
|
<phase>prepare-package</phase>
|
|
<goals>
|
|
<!-- pmd does not stop build when violations are found -->
|
|
<goal>pmd</goal>
|
|
|
|
<!-- check stops the build when violations are found -->
|
|
<!-- <goal>check</goal> -->
|
|
</goals>
|
|
</execution>
|
|
</executions>
|
|
</plugin>
|
|
|
|
<plugin>
|
|
<groupId>org.codehaus.mojo</groupId>
|
|
<artifactId>versions-maven-plugin</artifactId>
|
|
<version>${codehaus.version.plugin}</version>
|
|
<executions>
|
|
<execution>
|
|
<phase>validate</phase>
|
|
<goals>
|
|
<goal>display-dependency-updates</goal>
|
|
<goal>display-plugin-updates</goal>
|
|
<goal>display-property-updates</goal>
|
|
</goals>
|
|
</execution>
|
|
</executions>
|
|
</plugin>
|
|
|
|
<!-- JavaFX Plugin to start application -->
|
|
<plugin>
|
|
<groupId>org.openjfx</groupId>
|
|
<artifactId>javafx-maven-plugin</artifactId>
|
|
<version>${javafx.maven.plugin}</version>
|
|
<configuration>
|
|
<mainClass>${main.class}</mainClass>
|
|
</configuration>
|
|
</plugin>
|
|
|
|
</plugins>
|
|
</build>
|
|
|
|
<profiles>
|
|
|
|
<!-- Profile that adds JLink and JPackage runs.
|
|
|
|
Add -PImage or -DImage to use this profile.
|
|
-->
|
|
<profile>
|
|
<id>Image</id>
|
|
<activation>
|
|
<property>
|
|
<name>Image</name>
|
|
</property>
|
|
</activation>
|
|
<build>
|
|
<plugins>
|
|
<!-- Copy dependencies -->
|
|
<plugin>
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
<artifactId>maven-dependency-plugin</artifactId>
|
|
<version>${maven.dependency.plugin}</version>
|
|
<executions>
|
|
<!-- erstmal Abhängigkeiten für den Class-Path kopieren -->
|
|
<execution>
|
|
<id>copy-dependencies</id>
|
|
<phase>package</phase>
|
|
<goals>
|
|
<goal>copy-dependencies</goal>
|
|
</goals>
|
|
<configuration>
|
|
<outputDirectory>${project.build.directory}/modules</outputDirectory>
|
|
<includeScope>runtime</includeScope>
|
|
<overWriteReleases>false</overWriteReleases>
|
|
<overWriteSnapshots>false</overWriteSnapshots>
|
|
<overWriteIfNewer>true</overWriteIfNewer>
|
|
</configuration>
|
|
</execution>
|
|
|
|
<!-- dazu noch das Projekt-JAR -->
|
|
<execution>
|
|
<id>copy</id>
|
|
<phase>install</phase>
|
|
<goals>
|
|
<goal>copy</goal>
|
|
</goals>
|
|
<configuration>
|
|
<outputDirectory>${project.build.directory}/modules</outputDirectory>
|
|
<artifactItems>
|
|
<artifactItem>
|
|
<groupId>${project.groupId}</groupId>
|
|
<artifactId>${project.artifactId}</artifactId>
|
|
<version>${project.version}</version>
|
|
<type>${project.packaging}</type>
|
|
<destFileName>${project.build.finalName}.jar</destFileName>
|
|
</artifactItem>
|
|
</artifactItems>
|
|
<overWriteIfNewer>true</overWriteIfNewer>
|
|
</configuration>
|
|
</execution>
|
|
</executions>
|
|
</plugin>
|
|
|
|
<plugin>
|
|
<groupId>com.github.akman</groupId>
|
|
<artifactId>jpackage-maven-plugin</artifactId>
|
|
<version>${jpackage.maven.plugin}</version>
|
|
<configuration>
|
|
<name>${appName}</name>
|
|
<type>IMAGE</type>
|
|
<modulepath>
|
|
<dependencysets>
|
|
<dependencyset>
|
|
<includenames>
|
|
<includename>javafx\..*</includename>
|
|
</includenames>
|
|
</dependencyset>
|
|
</dependencysets>
|
|
</modulepath>
|
|
<addmodules>
|
|
<addmodule>javafx.controls</addmodule>
|
|
<addmodule>javafx.graphics</addmodule>
|
|
<addmodule>javafx.fxml</addmodule>
|
|
<addmodule>javafx.web</addmodule>
|
|
<addmodule>javafx.media</addmodule>
|
|
<addmodule>java.sql</addmodule>
|
|
<addmodule>java.net.http</addmodule>
|
|
<addmodule>jdk.crypto.ec</addmodule>
|
|
<addmodule>jdk.net</addmodule>
|
|
</addmodules>
|
|
<mainclass>${main.class}</mainclass>
|
|
<input>${project.build.directory}/modules</input>
|
|
<mainjar>${jar.filename}.jar</mainjar>
|
|
</configuration>
|
|
<executions>
|
|
<execution>
|
|
<phase>install</phase>
|
|
<goals>
|
|
<goal>jpackage</goal>
|
|
</goals>
|
|
</execution>
|
|
</executions>
|
|
</plugin>
|
|
</plugins>
|
|
</build>
|
|
</profile>
|
|
|
|
</profiles>
|
|
|
|
</project> |