Files
purnell569 60f3a6d693 Repoint fork references from arif-banai to purnell569
Anything that describes or acts on *this* repository now points here. Attribution
to the upstream authors is deliberately left untouched.

Functional, would otherwise misbehave on this fork:
- Docker workflows pushed to a ghcr namespace this account cannot write to.
- scripts/run_jmusicbot.sh auto-updated from arif-banai's releases, so it would
  have replaced this jar with the upstream one.
- pom.xml scm/issueManagement/ciManagement described the upstream repo.
- Removed .github/FUNDING.yml, which put a Sponsor button on this repo that
  funded arif-banai.

Cosmetic:
- Badges repointed; dropped the CircleCI, CodeFactor and Discord badges, which
  reported on services this fork is not registered with.
- License badge now targets main rather than master.
- Fixed the README header image: it was a float-right <img> that overlapped the
  note block, now centred above the title with alt text.
- Refreshed the stale JMusicBot-0.6.2 jar name in the run examples.

Left alone on purpose: copyright headers, pom.xml <developers>, the NOTICE and
README credit tables, and the upstream commit provenance in docs/ARCHITECTURE.md.
2026-09-11 14:01:42 +09:30

863 lines
38 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
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>
<groupId>com.arifbanai</groupId>
<artifactId>JMusicBot</artifactId>
<version>0.7.1</version>
<packaging>jar</packaging>
<name>JMusicBot</name>
<description>A cross-platform Discord music bot with a clean interface</description>
<url>https://jmusicbot.com</url>
<inceptionYear>2017</inceptionYear>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0</url>
<distribution>repo</distribution>
</license>
</licenses>
<organization>
<name>JMusicBot</name>
<url>https://jmusicbot.com</url>
</organization>
<developers>
<developer>
<id>jagrosh</id>
<name>John Grosh</name>
<url>https://github.com/jagrosh</url>
<roles>
<role>original author</role>
</roles>
</developer>
<developer>
<id>arif-banai</id>
<name>Arif Banai</name>
<url>https://github.com/arif-banai</url>
<roles>
<role>maintainer</role>
</roles>
</developer>
</developers>
<scm>
<connection>scm:git:https://github.com/purnell569/MusicBot.git</connection>
<developerConnection>scm:git:[email protected]:purnell569/MusicBot.git</developerConnection>
<url>https://github.com/purnell569/MusicBot</url>
<tag>HEAD</tag>
</scm>
<issueManagement>
<system>GitHub Issues</system>
<url>https://github.com/purnell569/MusicBot/issues</url>
</issueManagement>
<ciManagement>
<system>GitHub Actions</system>
<url>https://github.com/purnell569/MusicBot/actions</url>
</ciManagement>
<repositories>
<repository>
<id>dv8tion</id>
<name>m2-dv8tion</name>
<url>https://m2.dv8tion.net/releases</url>
</repository>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
<repository>
<id>arbjergDev</id>
<name>Lavalink Repository</name>
<url>https://maven.lavalink.dev/releases</url>
</repository>
<repository>
<id>lavalinkSnapshots</id>
<name>Lavalink Snapshot Repository</name>
<url>https://maven.lavalink.dev/snapshots</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>chew</id>
<name>m2-chew</name>
<url>https://m2.chew.pro/releases</url>
</repository>
</repositories>
<dependencyManagement>
<dependencies>
<!-- Jackson BOM to align all Jackson modules -->
<dependency>
<groupId>com.fasterxml.jackson</groupId>
<artifactId>jackson-bom</artifactId>
<version>${jackson-bom.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- JUnit BOM to align all JUnit modules -->
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>${junit-bom.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- SLF4J API - resolves 1.7.36/2.0.7 vs 2.0.17 conflicts -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- Kotlin stdlib - resolves 1.4.x/2.2.20 vs 2.2.21 conflicts -->
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>${kotlin-stdlib.version}</version>
</dependency>
<!-- JetBrains annotations - resolves 13.0 vs 24.0.0 -->
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>${jetbrains-annotations.version}</version>
</dependency>
<!-- org.json - resolves 20220320 vs 20240303 -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>${org-json.version}</version>
</dependency>
<!-- jsoup - resolves 1.16.1 vs 1.22.1 -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>${jsoup.version}</version>
</dependency>
<!-- Rhino engine - resolves 1.7.14 vs 1.7.15 -->
<dependency>
<groupId>org.mozilla</groupId>
<artifactId>rhino-engine</artifactId>
<version>${rhino-engine.version}</version>
</dependency>
<!-- lava-common - align to lavaplayer 2.2.7 -->
<dependency>
<groupId>dev.arbjerg</groupId>
<artifactId>lava-common</artifactId>
<version>${lava-common.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Discord Dependencies -->
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>${jda.version}</version>
</dependency>
<dependency>
<groupId>pw.chew</groupId>
<artifactId>jda-chewtils</artifactId>
<version>${jda-chewtils.version}</version>
<scope>compile</scope>
<type>pom</type>
<exclusions>
<!-- Exclude ancient slf4j 1.7.x - we use 2.0.17 via logback -->
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<!-- Exclude ancient kotlin 1.4.x - incompatible with JDA's kotlin 2.x -->
<exclusion>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
</exclusion>
<exclusion>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-common</artifactId>
</exclusion>
<!-- Exclude old okhttp 4.x - JDA uses okhttp 5.x -->
<exclusion>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</exclusion>
<!-- Exclude old okio 2.x - JDA uses okio 3.x -->
<exclusion>
<groupId>com.squareup.okio</groupId>
<artifactId>okio</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- DAVE Protocol Dependencies -->
<!-- https://github.com/MinnDevelopment/jdave -->
<dependency>
<groupId>club.minnced</groupId>
<artifactId>jdave-api</artifactId>
<version>${jdave.version}</version>
</dependency>
<dependency>
<groupId>club.minnced</groupId>
<artifactId>jdave-native-linux-x86-64</artifactId>
<version>${jdave.version}</version>
</dependency>
<dependency>
<groupId>club.minnced</groupId>
<artifactId>jdave-native-linux-aarch64</artifactId>
<version>${jdave.version}</version>
</dependency>
<dependency>
<groupId>club.minnced</groupId>
<artifactId>jdave-native-win-x86-64</artifactId>
<version>${jdave.version}</version>
</dependency>
<dependency>
<groupId>club.minnced</groupId>
<artifactId>jdave-native-darwin</artifactId>
<version>${jdave.version}</version>
</dependency>
<!-- Native Audio Send (udpqueue) Dependencies -->
<!-- https://github.com/MinnDevelopment/udpqueue.rs -->
<dependency>
<groupId>club.minnced</groupId>
<artifactId>udpqueue-native-linux-x86-64</artifactId>
<version>${udpqueue.version}</version>
</dependency>
<dependency>
<groupId>club.minnced</groupId>
<artifactId>udpqueue-native-linux-x86</artifactId>
<version>${udpqueue.version}</version>
</dependency>
<dependency>
<groupId>club.minnced</groupId>
<artifactId>udpqueue-native-linux-aarch64</artifactId>
<version>${udpqueue.version}</version>
</dependency>
<dependency>
<groupId>club.minnced</groupId>
<artifactId>udpqueue-native-linux-arm</artifactId>
<version>${udpqueue.version}</version>
</dependency>
<dependency>
<groupId>club.minnced</groupId>
<artifactId>udpqueue-native-linux-musl-x86-64</artifactId>
<version>${udpqueue.version}</version>
</dependency>
<dependency>
<groupId>club.minnced</groupId>
<artifactId>udpqueue-native-linux-musl-aarch64</artifactId>
<version>${udpqueue.version}</version>
</dependency>
<dependency>
<groupId>club.minnced</groupId>
<artifactId>udpqueue-native-win-x86-64</artifactId>
<version>${udpqueue.version}</version>
</dependency>
<dependency>
<groupId>club.minnced</groupId>
<artifactId>udpqueue-native-win-x86</artifactId>
<version>${udpqueue.version}</version>
</dependency>
<dependency>
<groupId>club.minnced</groupId>
<artifactId>udpqueue-native-win-aarch64</artifactId>
<version>${udpqueue.version}</version>
</dependency>
<dependency>
<groupId>club.minnced</groupId>
<artifactId>udpqueue-native-darwin</artifactId>
<version>${udpqueue.version}</version>
</dependency>
<!-- Music Dependencies -->
<dependency>
<groupId>dev.arbjerg</groupId>
<artifactId>lavaplayer</artifactId>
<version>${lavaplayer.version}</version>
</dependency>
<!-- YouTube Source (lavalink-devs) - v2 module provides lavaplayer 2.x thumbnail clients -->
<dependency>
<groupId>dev.lavalink.youtube</groupId>
<artifactId>v2</artifactId>
<version>${youtube-source.version}</version>
</dependency>
<!-- Dropping JLyrics since it is not being maintained / not working anymore -->
<!-- <dependency>
<groupId>com.github.jagrosh</groupId>
<artifactId>JLyrics</artifactId>
<version>master-SNAPSHOT</version>
</dependency> -->
<!-- Misc Internal Dependencies -->
<!-- Source: https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<!-- Source: https://mvnrepository.com/artifact/com.typesafe/config -->
<dependency>
<groupId>com.typesafe</groupId>
<artifactId>config</artifactId>
<version>${typesafe-config.version}</version>
</dependency>
<!-- Source: https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<!-- Version managed by dependencyManagement -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
</dependency>
<!-- Using Jackson (already included via JDA transitive dependency) to reduce shaded jar size -->
<!-- Source: https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<!-- Version managed by jackson-bom in dependencyManagement -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- GUI Dependencies -->
<!-- FlatLaf Look and Feel - Modern flat Swing L&F -->
<!-- Source: https://github.com/JFormDesigner/FlatLaf -->
<dependency>
<groupId>com.formdev</groupId>
<artifactId>flatlaf</artifactId>
<version>${flatlaf.version}</version>
</dependency>
<!-- FlatLaf Extras - SVG icons, UI inspector, and more -->
<dependency>
<groupId>com.formdev</groupId>
<artifactId>flatlaf-extras</artifactId>
<version>${flatlaf.version}</version>
</dependency>
<!-- Testing Dependencies -->
<!-- Version managed by junit-bom in dependencyManagement -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
<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>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<version>${hamcrest.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>mockwebserver</artifactId>
<version>5.3.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>${maven-jar-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>${maven-shade-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>${maven-enforcer-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>${maven-dependency-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>${versions-maven-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>${checkstyle-maven-plugin.version}</version>
</plugin>
<plugin>
<groupId>com.github.spotbugs</groupId>
<artifactId>spotbugs-maven-plugin</artifactId>
<version>${spotbugs-maven-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco-maven-plugin.version}</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>All</shadedClassifierName>
<artifactSet>
<includes>
<include>*:*</include>
</includes>
</artifactSet>
<filters>
<!-- Keep native libraries intact -->
<filter>
<artifact>club.minnced:*</artifact>
<includes>
<include>**</include>
</includes>
</filter>
<!-- Keep classes that may be loaded via reflection -->
<filter>
<artifact>ch.qos.logback:*</artifact>
<includes>
<include>**</include>
</includes>
</filter>
<filter>
<artifact>org.slf4j:*</artifact>
<includes>
<include>**</include>
</includes>
</filter>
<!-- Keep FlatLaf resources intact (themes, properties, native libs) -->
<filter>
<artifact>com.formdev:*</artifact>
<includes>
<include>**</include>
</includes>
</filter>
</filters>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>reference.conf</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>com.jagrosh.jmusicbot.JMusicBot</Main-Class>
<Specification-Title>${project.artifactId}</Specification-Title>
<Specification-Version>${project.version}</Specification-Version>
<Implementation-Title>${project.artifactId}</Implementation-Title>
<Implementation-Version>${project.version}</Implementation-Version>
<Implementation-Vendor-Id>${project.groupId}</Implementation-Vendor-Id>
</manifestEntries>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/unit/**/*Test.java</include>
<include>**/unit/**/*Tests.java</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
<configuration>
<includes>
<include>**/integration/**/*Test.java</include>
<include>**/integration/**/*Tests.java</include>
<include>**/integration/**/*IT.java</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<release>${maven.compiler.release}</release>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<executions>
<execution>
<id>enforce-versions</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireMavenVersion>
<version>[3.8.0,)</version>
</requireMavenVersion>
<requireJavaVersion>
<version>[25,)</version>
</requireJavaVersion>
<banDuplicatePomDependencyVersions/>
</rules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<properties>
<!-- Build settings -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>25</maven.compiler.source>
<maven.compiler.target>25</maven.compiler.target>
<maven.compiler.release>25</maven.compiler.release>
<!-- Reproducible builds -->
<project.build.outputTimestamp>2026-07-14T05:29:10Z</project.build.outputTimestamp>
<!-- Dependency versions -->
<jda.version>6.4.2</jda.version>
<jda-chewtils.version>2.2.1</jda-chewtils.version>
<jdave.version>0.1.7</jdave.version>
<udpqueue.version>0.2.12</udpqueue.version>
<lavaplayer.version>2.2.7</lavaplayer.version>
<!-- Pinned to the current youtube-source main HEAD. 1.18.2 predates the fixes for
the TV client User-Agent ("The page needs to be reloaded") and for formats
that omit contentLength; no 1.18.3 has been released yet. -->
<youtube-source.version>f45bbb7aebfcbc1c553769e04af6cd43afa8b7c3-SNAPSHOT</youtube-source.version>
<logback.version>1.5.25</logback.version>
<typesafe-config.version>1.4.3</typesafe-config.version>
<jsoup.version>1.22.1</jsoup.version>
<mockito.version>5.21.0</mockito.version>
<hamcrest.version>3.0</hamcrest.version>
<flatlaf.version>3.7</flatlaf.version>
<!-- BOM versions -->
<jackson-bom.version>2.20.1</jackson-bom.version>
<junit-bom.version>5.14.2</junit-bom.version>
<!-- Managed dependency versions -->
<slf4j.version>2.0.17</slf4j.version>
<kotlin-stdlib.version>2.2.21</kotlin-stdlib.version>
<jetbrains-annotations.version>24.0.0</jetbrains-annotations.version>
<org-json.version>20240303</org-json.version>
<rhino-engine.version>1.7.15</rhino-engine.version>
<lava-common.version>2.2.7</lava-common.version>
<!-- Plugin versions -->
<maven-compiler-plugin.version>3.13.0</maven-compiler-plugin.version>
<maven-shade-plugin.version>3.6.1</maven-shade-plugin.version>
<maven-surefire-plugin.version>3.5.4</maven-surefire-plugin.version>
<maven-jar-plugin.version>3.4.2</maven-jar-plugin.version>
<maven-enforcer-plugin.version>3.5.0</maven-enforcer-plugin.version>
<maven-dependency-plugin.version>3.8.1</maven-dependency-plugin.version>
<versions-maven-plugin.version>2.18.0</versions-maven-plugin.version>
<spotbugs-maven-plugin.version>4.9.3.0</spotbugs-maven-plugin.version>
<checkstyle-maven-plugin.version>3.6.0</checkstyle-maven-plugin.version>
<jacoco-maven-plugin.version>0.8.13</jacoco-maven-plugin.version>
</properties>
<profiles>
<!-- Code style enforcement profile -->
<profile>
<id>checkstyle</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<configuration>
<configLocation>google_checks.xml</configLocation>
<consoleOutput>true</consoleOutput>
<failsOnError>true</failsOnError>
</configuration>
<executions>
<execution>
<id>checkstyle-check</id>
<phase>verify</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!-- Static analysis profile -->
<profile>
<id>spotbugs</id>
<build>
<plugins>
<plugin>
<groupId>com.github.spotbugs</groupId>
<artifactId>spotbugs-maven-plugin</artifactId>
<executions>
<execution>
<id>spotbugs-check</id>
<phase>verify</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!-- Test coverage profile -->
<profile>
<id>coverage</id>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>prepare-agent-integration</id>
<goals>
<goal>prepare-agent-integration</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
<execution>
<id>report-integration</id>
<phase>post-integration-test</phase>
<goals>
<goal>report-integration</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!-- Dependency analysis profile -->
<profile>
<id>dependency-check</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</profile>
<!-- E2E test profile -->
<profile>
<id>e2e</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<id>e2e-tests</id>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
<configuration>
<includes>
<include>**/e2e/**/*Test.java</include>
<include>**/e2e/**/*Tests.java</include>
<include>**/e2e/**/*IT.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!-- Docker build profile - excludes unnecessary platform-specific dependencies -->
<!-- Docker only needs linux-x86-64 and linux-aarch64 for amd64/arm64 platforms -->
<profile>
<id>docker</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<id>default</id>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>All</shadedClassifierName>
<artifactSet>
<includes>
<include>*:*</include>
</includes>
<!-- Exclude platform-specific dependencies not needed for Docker -->
<excludes>
<!-- jdave: exclude Windows and macOS -->
<exclude>club.minnced:jdave-native-win-x86-64</exclude>
<exclude>club.minnced:jdave-native-darwin</exclude>
<!-- udpqueue: exclude Windows, macOS, and unnecessary Linux variants -->
<exclude>club.minnced:udpqueue-native-win-x86-64</exclude>
<exclude>club.minnced:udpqueue-native-win-x86</exclude>
<exclude>club.minnced:udpqueue-native-win-aarch64</exclude>
<exclude>club.minnced:udpqueue-native-darwin</exclude>
<exclude>club.minnced:udpqueue-native-linux-x86</exclude>
<exclude>club.minnced:udpqueue-native-linux-arm</exclude>
<exclude>club.minnced:udpqueue-native-linux-musl-x86-64</exclude>
<exclude>club.minnced:udpqueue-native-linux-musl-aarch64</exclude>
</excludes>
</artifactSet>
<filters>
<!-- Keep native libraries intact -->
<filter>
<artifact>club.minnced:*</artifact>
<includes>
<include>**</include>
</includes>
</filter>
<!-- Keep classes that may be loaded via reflection -->
<filter>
<artifact>ch.qos.logback:*</artifact>
<includes>
<include>**</include>
</includes>
</filter>
<filter>
<artifact>org.slf4j:*</artifact>
<includes>
<include>**</include>
</includes>
</filter>
<!-- Keep FlatLaf resources intact (themes, properties, native libs) -->
<filter>
<artifact>com.formdev:*</artifact>
<includes>
<include>**</include>
</includes>
</filter>
</filters>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>reference.conf</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>com.jagrosh.jmusicbot.JMusicBot</Main-Class>
<Specification-Title>${project.artifactId}</Specification-Title>
<Specification-Version>${project.version}</Specification-Version>
<Implementation-Title>${project.artifactId}</Implementation-Title>
<Implementation-Version>${project.version}</Implementation-Version>
<Implementation-Vendor-Id>${project.groupId}</Implementation-Vendor-Id>
</manifestEntries>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>