Subject: [PATCH] Sample POM files for JOSM core and two plugins
---
Index: plugins/apache-commons/pom.xml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/plugins/apache-commons/pom.xml b/plugins/apache-commons/pom.xml
new file mode 100644
--- /dev/null	(date 1715876389736)
+++ b/plugins/apache-commons/pom.xml	(date 1715876389736)
@@ -0,0 +1,88 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.openstreetmap.josm.plugins</groupId>
+        <artifactId>plugin-root</artifactId>
+        <version>1.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <artifactId>apache-commons</artifactId>
+    <version>1.0-SNAPSHOT</version>
+    <properties>
+        <plugin.src.dir>src</plugin.src.dir>
+        <plugin.main.version>10580</plugin.main.version>
+        <plugin.canloadatruntime>true</plugin.canloadatruntime>
+        <plugin.author>nokutu; Don-vip</plugin.author>
+        <plugin.class>org.openstreetmap.josm.plugins.commons.CommonsPlugin</plugin.class>
+        <plugin.description>Provides Apache Commons library components. Not meant to be installed directly by users, but rather as a dependency for other plugins.</plugin.description>
+        <plugin.stage>10</plugin.stage>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>com.github.luben</groupId>
+            <artifactId>zstd-jni</artifactId>
+            <version>1.5.5-6</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-collections4</artifactId>
+            <version>4.4</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-compress</artifactId>
+            <!-- version is in parent pom -->
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-imaging</artifactId>
+            <version>1.0-alpha3</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.15.1</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+            <version>1.2</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <!-- version is in parent pom -->
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-math3</artifactId>
+            <version>3.6.1</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-text</artifactId>
+            <version>1.11.0</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.brotli</groupId>
+            <artifactId>dec</artifactId>
+            <version>0.1.2</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.tukaani</groupId>
+            <artifactId>xz</artifactId>
+            <!-- version is in parent pom -->
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+</project>
Index: plugins/apache-http/pom.xml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/plugins/apache-http/pom.xml b/plugins/apache-http/pom.xml
new file mode 100644
--- /dev/null	(date 1715783079725)
+++ b/plugins/apache-http/pom.xml	(date 1715783079725)
@@ -0,0 +1,62 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.openstreetmap.josm.plugins</groupId>
+        <artifactId>plugin-root</artifactId>
+        <version>1.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <artifactId>apache-http</artifactId>
+    <version>1.0-SNAPSHOT</version>
+    <properties>
+        <plugin.src.dir>${project.basedir}/src</plugin.src.dir>
+        <plugin.main.version>10580</plugin.main.version>
+        <plugin.author>Don-vip</plugin.author>
+        <plugin.class>org.openstreetmap.josm.plugins.http.HttpPlugin</plugin.class>
+        <plugin.description>Provides Apache HTTP library. Not meant to be installed directly by users, but rather as a dependency for other plugins.</plugin.description>
+        <plugin.requires>apache-commons;jna</plugin.requires>
+        <plugin.stage>15</plugin.stage>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.openstreetmap.josm.plugins</groupId>
+            <artifactId>apache-commons</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents.client5</groupId>
+            <artifactId>httpclient5</artifactId>
+            <version>5.2.1</version>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>com.diffplug.spotless</groupId>
+                <artifactId>spotless-maven-plugin</artifactId>
+                <version>2.30.0</version>
+                <configuration>
+                    <java>
+                        <eclipse>
+                            <version>4.21.0</version>
+                            <file>${project.basedir}/../00_core_tools/eclipse/formatter.xml</file>
+                        </eclipse>
+                        <removeUnusedImports/>
+                        <licenseHeader>
+                            <content>// License: GPL. For details, see LICENSE file.</content>
+                        </licenseHeader>
+                    </java>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>check</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
Index: core/scripts/BuildProjectionDefinitions.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/core/scripts/BuildProjectionDefinitions.java b/core/scripts/BuildProjectionDefinitions.java
--- a/core/scripts/BuildProjectionDefinitions.java	(revision 19081)
+++ b/core/scripts/BuildProjectionDefinitions.java	(date 1715884325376)
@@ -13,6 +13,7 @@
 import java.util.Locale;
 import java.util.Map;
 import java.util.TreeMap;
+import java.util.logging.Logger;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -84,6 +85,19 @@
                 .collect(Collectors.toList());
     }
 
+    static boolean touchCustomEpsg(String baseDir) throws IOException {
+        final Path path = Paths.get(baseDir).resolve(OUTPUT_EPSG_FILE);
+        if (!Files.exists(path)) {
+            Files.createDirectories(path.getParent());
+            Files.createFile(path);
+            Logger.getLogger(BuildProjectionDefinitions.class.getCanonicalName())
+                    .info("Could not generate custom-epsg; an empty custom-epsg file was not available on the classpath. " +
+                            "This should now be fixed, please rerun the command.");
+            return true;
+        }
+        return false;
+    }
+
     static void initMap(String baseDir, String file, Map<String, ProjectionDefinition> map) throws IOException {
         final Path path = Paths.get(baseDir).resolve(PROJ_DIR).resolve(file);
         final List<ProjectionDefinition> list;
@@ -106,6 +120,9 @@
     }
 
     static void buildList(String baseDir) throws IOException {
+        if (touchCustomEpsg(baseDir)) {
+            return;
+        }
         initMap(baseDir, JOSM_EPSG_FILE, epsgJosm);
         initMap(baseDir, PROJ4_EPSG_FILE, epsgProj4);
         initMap(baseDir, PROJ4_ESRI_FILE, esriProj4);
@@ -242,7 +259,7 @@
                 "EPSG:103471", // lcc/GRS80     - NAD_1983_HARN_WISCRS_Wood_County_Feet [NAD 1983 HARN Wisconsin CRS Wood (US feet)]
                 "EPSG:103474", // lcc/GRS80     - NAD_1983_CORS96_StatePlane_Nebraska_FIPS_2600 [NAD 1983 (CORS96) SPCS Nebraska]
                 "EPSG:103475"  // lcc/GRS80     - NAD_1983_CORS96_StatePlane_Nebraska_FIPS_2600_Ft_US [NAD 1983 (CORS96) SPCS Nebraska (US Feet)]
-                ).contains(pd.code)) {
+        ).contains(pd.code)) {
             result = false;
         }
         // CHECKSTYLE.ON: LineLength
Index: core/pom.xml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/core/pom.xml b/core/pom.xml
new file mode 100644
--- /dev/null	(date 1715812144837)
+++ b/core/pom.xml	(date 1715812144837)
@@ -0,0 +1,269 @@
+<?xml version="1.0"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.openstreetmap.josm</groupId>
+    <artifactId>josm-parent</artifactId>
+    <version>1.0-SNAPSHOT</version>
+    <packaging>pom</packaging>
+    <properties>
+        <project.build.sourceEncoding>US-ASCII</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>US-ASCII</project.reporting.outputEncoding>
+        <java.lang.version>11</java.lang.version>
+        <maven.compiler.release>${java.lang.version}</maven.compiler.release>
+        <test.headless>true</test.headless>
+    </properties>
+    <modules>
+        <module>pom-josm.xml</module>
+        <!-- The test pom is mostly for plugins; JOSM core dev doesn't need it -->
+        <module>test/pom.xml</module>
+    </modules>
+    <repositories>
+        <repository>
+            <id>JOSM-central</id>
+            <url>https://josm.openstreetmap.de/nexus/content/repositories/central/</url>
+        </repository>
+        <repository>
+            <id>JOSM-releases</id>
+            <url>https://josm.openstreetmap.de/nexus/content/repositories/releases/</url>
+        </repository>
+        <repository>
+            <id>JOSM-snapshots</id>
+            <url>https://josm.openstreetmap.de/nexus/content/repositories/snapshots/</url>
+        </repository>
+        <repository>
+            <id>JOSM-osgeo</id>
+            <url>https://josm.openstreetmap.de/nexus/content/repositories/osgeo/</url>
+        </repository>
+    </repositories>
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.codehaus.mojo</groupId>
+                    <artifactId>javacc-maven-plugin</artifactId>
+                    <version>3.1.0</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-clean-plugin</artifactId>
+                    <version>3.3.2</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.codehaus.mojo</groupId>
+                    <artifactId>exec-maven-plugin</artifactId>
+                    <version>3.2.0</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-resources-plugin</artifactId>
+                    <version>3.3.1</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-pmd-plugin</artifactId>
+                    <version>3.22.0</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-surefire-plugin</artifactId>
+                    <version>3.2.5</version>
+                </plugin>
+                <plugin>
+                    <groupId>com.github.spotbugs</groupId>
+                    <artifactId>spotbugs-maven-plugin</artifactId>
+                    <version>4.8.5.0</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-checkstyle-plugin</artifactId>
+                    <version>3.3.1</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-shade-plugin</artifactId>
+                    <version>3.5.3</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-jar-plugin</artifactId>
+                    <version>3.4.1</version>
+                </plugin>
+                <!-- Used to set version information -->
+                <plugin>
+                    <groupId>org.codehaus.mojo</groupId>
+                    <artifactId>buildnumber-maven-plugin</artifactId>
+                    <version>3.2.0</version>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-enforcer-plugin</artifactId>
+                <version>3.4.1</version>
+                <executions>
+                    <execution>
+                        <id>enforce-versions</id>
+                        <goals>
+                            <goal>enforce</goal>
+                        </goals>
+                        <configuration>
+                            <rules>
+                                <requireMavenVersion>
+                                    <version>3.6.3</version>
+                                </requireMavenVersion>
+                                <requireJavaVersion>
+                                    <version>11</version>
+                                </requireJavaVersion>
+                            </rules>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.junit</groupId>
+                <artifactId>junit-bom</artifactId>
+                <version>5.10.2</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.openstreetmap.jmapviewer</groupId>
+                <artifactId>jmapviewer</artifactId>
+                <version>2.19</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>jakarta.json</groupId>
+                <artifactId>jakarta.json-api</artifactId>
+                <version>2.1.3</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.eclipse.parsson</groupId>
+                <artifactId>parsson</artifactId>
+                <version>1.1.6</version>
+                <scope>runtime</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-jcs3-core</artifactId>
+                <version>3.2</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-compress</artifactId>
+                <version>1.26.1</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>jakarta.annotation</groupId>
+                <artifactId>jakarta.annotation-api</artifactId>
+                <version>2.1.1</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.tukaani</groupId>
+                <artifactId>xz</artifactId>
+                <version>1.9</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>com.adobe.xmp</groupId>
+                <artifactId>xmpcore</artifactId>
+                <version>6.1.11</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>com.drewnoakes</groupId>
+                <artifactId>metadata-extractor</artifactId>
+                <version>2.19.0</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>com.formdev</groupId>
+                <artifactId>svgSalamander</artifactId>
+                <version>1.1.4</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>ch.poole</groupId>
+                <artifactId>OpeningHoursParser</artifactId>
+                <version>0.28.2</version>
+                <scope>provided</scope>
+            </dependency>
+            <!-- Don't forget to update org.openstreetmap.josm.tools.Tag2Link#PREF_SOURCE -->
+            <dependency>
+                <groupId>org.webjars.npm</groupId>
+                <artifactId>tag2link</artifactId>
+                <version>2024.2.8</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.jacoco</groupId>
+                <artifactId>org.jacoco.ant</artifactId>
+                <version>0.8.12</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.jmockit</groupId>
+                <artifactId>jmockit</artifactId>
+                <version>1.49.a</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>com.github.spotbugs</groupId>
+                <artifactId>spotbugs-annotations</artifactId>
+                <version>4.8.5</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>com.ginsberg</groupId>
+                <artifactId>junit5-system-exit</artifactId>
+                <version>1.1.2</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.wiremock</groupId>
+                <artifactId>wiremock</artifactId>
+                <version>3.5.4</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>io.github.classgraph</groupId>
+                <artifactId>classgraph</artifactId>
+                <version>4.8.172</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>net.trajano.commons</groupId>
+                <artifactId>commons-testing</artifactId>
+                <version>2.1.0</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>nl.jqno.equalsverifier</groupId>
+                <artifactId>equalsverifier</artifactId>
+                <version>3.16.1</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-lang3</artifactId>
+                <version>3.14.0</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.awaitility</groupId>
+                <artifactId>awaitility</artifactId>
+                <version>4.2.1</version>
+                <scope>test</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+</project>
\ No newline at end of file
Index: core/pom-josm.xml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/core/pom-josm.xml b/core/pom-josm.xml
new file mode 100644
--- /dev/null	(date 1715810716026)
+++ b/core/pom-josm.xml	(date 1715810716026)
@@ -0,0 +1,762 @@
+<?xml version="1.0"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>josm</artifactId>
+  <version>1.0-SNAPSHOT</version>
+
+  <parent>
+    <groupId>org.openstreetmap.josm</groupId>
+    <artifactId>josm-parent</artifactId>
+    <version>1.0-SNAPSHOT</version>
+    <relativePath>./pom.xml</relativePath>
+  </parent>
+
+  <name>JOSM</name>
+  <url>https://josm.openstreetmap.de</url>
+  <properties>
+    <src.dir>${project.basedir}/src</src.dir>
+    <test.dir>${project.basedir}/test</test.dir>
+    <scripts.src.dir>${project.basedir}/scripts</scripts.src.dir>
+    <build.dir>${project.basedir}/build</build.dir>
+    <dist.dir>${project.basedir}/dist</dist.dir>
+    <checkstyle-build.dir>${project.basedir}/build2</checkstyle-build.dir>
+    <checkstyle.dir>${tools.dir}/checkstyle</checkstyle.dir>
+    <mapcss.dir>${src.dir}/org/openstreetmap/josm/gui/mappaint/mapcss</mapcss.dir>
+    <modules.dir>${dist.dir}/modules</modules.dir>
+    <pmd.dir>${tools.dir}/pmd</pmd.dir>
+    <proj-build.dir>${project.basedir}/build2</proj-build.dir>
+    <resources.dir>${project.basedir}/resources</resources.dir>
+    <script-build.dir>${project.basedir}/build2</script-build.dir>
+    <spotbugs.dir>${tools.dir}/spotbugs</spotbugs.dir>
+    <tools.dir>${project.basedir}/tools</tools.dir>
+    <epsg.output>${resources.dir}/data/projection/custom-epsg</epsg.output>
+    <javacc.home>${tools.dir}</javacc.home>
+    <dist.jar>${dist.dir}/josm-custom.jar</dist.jar>
+    <dist-optimized.jar>${dist.dir}/josm-custom-optimized.jar</dist-optimized.jar>
+    <dist-sources.jar>${dist.dir}/josm-custom-sources.jar</dist-sources.jar>
+    <jacoco.includes>org.openstreetmap.josm.*</jacoco.includes>
+    <jacoco.inclbootstrapclasses>false</jacoco.inclbootstrapclasses>
+    <jacoco.inclnolocationclasses>false</jacoco.inclnolocationclasses>
+    <junit.printsummary>on</junit.printsummary>
+    <default-junit-includes>**/*Test.class</default-junit-includes>
+    <default-junitIT-includes>**/*TestIT.class</default-junitIT-includes>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+  <packaging>jar</packaging>
+  <inceptionYear>2005</inceptionYear>
+  <licenses>
+    <license>
+      <name>GPL-2.0-or-later</name>
+      <url>https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html</url>
+      <distribution>repo</distribution>
+    </license>
+  </licenses>
+  <organization>
+    <name>JOSM</name>
+    <url>https://josm.openstreetmap.de</url>
+  </organization>
+  <scm>
+    <connection>scm:svn:https://josm.openstreetmap.de/svn/trunk</connection>
+    <url>https://josm.openstreetmap.de/browser/josm/trunk</url>
+  </scm>
+  <issueManagement>
+    <system>Trac</system>
+    <url>https://josm.openstreetmap.de</url>
+  </issueManagement>
+  <mailingLists>
+    <mailingList>
+      <name>josm-dev</name>
+      <archive>https://lists.openstreetmap.org/pipermail/josm-dev/</archive>
+      <post>josm-dev@openstreetmap.org</post>
+    </mailingList>
+  </mailingLists>
+
+  <dependencies>
+    <!-- Deprecated dependencies (to remove sometime in 2024)-->
+    <dependency>
+      <groupId>javax.json</groupId>
+      <artifactId>javax.json-api</artifactId>
+      <version>1.1.4</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.glassfish</groupId>
+      <artifactId>javax.json</artifactId>
+      <version>1.1.4</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.google.code.findbugs</groupId>
+      <artifactId>jsr305</artifactId>
+      <version>3.0.2</version>
+      <scope>compile</scope>
+    </dependency>
+    <!-- end Deprecated dependencies -->
+    <dependency>
+      <groupId>org.openstreetmap.jmapviewer</groupId>
+      <artifactId>jmapviewer</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>jakarta.json</groupId>
+      <artifactId>jakarta.json-api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.parsson</groupId>
+      <artifactId>parsson</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-jcs3-core</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-compress</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>jakarta.annotation</groupId>
+      <artifactId>jakarta.annotation-api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.tukaani</groupId>
+      <artifactId>xz</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.adobe.xmp</groupId>
+      <artifactId>xmpcore</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.drewnoakes</groupId>
+      <artifactId>metadata-extractor</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.formdev</groupId>
+      <artifactId>svgSalamander</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>ch.poole</groupId>
+      <artifactId>OpeningHoursParser</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <!-- Don't forget to update org.openstreetmap.josm.tools.Tag2Link#PREF_SOURCE -->
+    <dependency>
+      <groupId>org.webjars.npm</groupId>
+      <artifactId>tag2link</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jacoco</groupId>
+      <artifactId>org.jacoco.ant</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.jmockit</groupId>
+      <artifactId>jmockit</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.github.spotbugs</groupId>
+      <artifactId>spotbugs-annotations</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.ginsberg</groupId>
+      <artifactId>junit5-system-exit</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.wiremock</groupId>
+      <artifactId>wiremock</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>io.github.classgraph</groupId>
+      <artifactId>classgraph</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.junit.platform</groupId>
+      <artifactId>junit-platform-launcher</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.junit.platform</groupId>
+      <artifactId>junit-platform-suite</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.junit.vintage</groupId>
+      <artifactId>junit-vintage-engine</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-params</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-api</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-engine</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-migrationsupport</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>net.trajano.commons</groupId>
+      <artifactId>commons-testing</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>nl.jqno.equalsverifier</groupId>
+      <artifactId>equalsverifier</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.awaitility</groupId>
+      <artifactId>awaitility</artifactId>
+    </dependency>
+  </dependencies>
+  <build>
+    <sourceDirectory>${src.dir}</sourceDirectory>
+    <testSourceDirectory>${test.dir}/unit</testSourceDirectory>
+    <scriptSourceDirectory>${scripts.src.dir}</scriptSourceDirectory>
+    <resources>
+      <resource>
+        <directory>${resources.dir}</directory>
+      </resource>
+      <resource>
+        <directory>${project.basedir}</directory>
+        <includes>
+          <include>CONTRIBUTION</include>
+          <include>gpl-2.0.txt</include>
+          <include>gpl-3.0.txt</include>
+          <include>LICENSE</include>
+          <include>README</include>
+          <include>REVISION</include>
+        </includes>
+      </resource>
+    </resources>
+    <testResources>
+      <testResource>
+        <directory>${test.dir}/data</directory>
+      </testResource>
+    </testResources>
+    <plugins>
+      <!-- Generate sources -->
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>javacc-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>javacc</id>
+            <goals>
+              <goal>javacc</goal>
+            </goals>
+            <configuration>
+              <debugParser>false</debugParser>
+              <debugTokenManager>false</debugTokenManager>
+              <jdkVersion>${java.lang.version}</jdkVersion>
+              <grammarEncoding>UTF-8</grammarEncoding>
+              <unicodeInput>true</unicodeInput>
+              <sourceDirectory>${src.dir}</sourceDirectory>
+              <outputDirectory>${src.dir}</outputDirectory>
+              <includes><include>**/MapCSSParser.jj</include></includes>
+              <excludes><exclude>**/*.java</exclude></excludes>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <!-- Update proj, epsg, etc. -->
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>exec-maven-plugin</artifactId>
+        <executions>
+          <!-- mvn test-compile && mvn exec:java@update-proj-reference-files -->
+          <execution>
+            <id>update-proj-reference-files</id>
+            <configuration>
+              <classpathScope>test</classpathScope>
+              <mainClass>org.openstreetmap.josm.data.projection.ProjectionRefTest</mainClass>
+            </configuration>
+            <goals>
+              <goal>java</goal>
+            </goals>
+          </execution>
+          <!-- mvn test-compile && mvn exec:java@update-proj-regression-files -->
+          <execution>
+            <id>update-proj-regression-files</id>
+            <configuration>
+              <classpathScope>test</classpathScope>
+              <mainClass>org.openstreetmap.josm.data.projection.ProjectionRegressionTest</mainClass>
+            </configuration>
+            <goals>
+              <goal>java</goal>
+            </goals>
+          </execution>
+          <!-- mvn compile && mvn exec:java@SyncEditorLayerIndex -->
+          <execution>
+            <id>SyncEditorLayerIndex</id>
+            <configuration>
+              <executable>java</executable>
+              <arguments>
+                <argument>-Djava.awt.headless=true</argument>
+                <argument>-classpath</argument>
+                <classpath/> <!-- Generates the actual classpath using all project dependencies -->
+                <argument>${scripts.src.dir}/SyncEditorLayerIndex.java</argument>
+                <argument>${basedir}</argument>
+              </arguments>
+              <!-- We need commons-lang3, which isn't needed elsewhere in core (besides a test or two) -->
+              <classpathScope>test</classpathScope>
+            </configuration>
+            <goals>
+              <goal>exec</goal>
+            </goals>
+          </execution>
+          <!-- Note that the epsg-touch/epsg executions are NOT duplicates - the first epsg makes an empty file for the
+               next run, which makes a non-empty custom-epsg file -->
+          <execution>
+            <id>epsg-touch</id>
+            <configuration>
+              <executable>java</executable>
+              <arguments>
+                <argument>-Djava.awt.headless=true</argument>
+                <argument>-classpath</argument>
+                <classpath/> <!-- Generates the actual classpath using all project dependencies -->
+                <argument>${basedir}/scripts/BuildProjectionDefinitions.java</argument>
+                <argument>${basedir}</argument>
+              </arguments>
+            </configuration>
+            <phase>process-classes</phase>
+            <goals>
+              <goal>exec</goal>
+            </goals>
+          </execution>
+          <execution>
+            <id>epsg</id>
+            <configuration>
+              <executable>java</executable>
+              <arguments>
+                <argument>-Djava.awt.headless=true</argument>
+                <argument>-classpath</argument>
+                <classpath/> <!-- Generates the actual classpath using all project dependencies -->
+                <argument>${basedir}/scripts/BuildProjectionDefinitions.java</argument>
+                <argument>${basedir}</argument>
+              </arguments>
+            </configuration>
+            <phase>generate-test-resources</phase>
+            <goals>
+              <goal>exec</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <!-- This *must* be after the exec-maven-plugin since the epsg execution must occur first -->
+        <artifactId>maven-resources-plugin</artifactId>
+        <executions>
+          <!-- Note that the copy-resources-{epsg-touch,epsg} executions are NOT duplicates - the first epsg makes an
+               empty file for the next run, which makes a non-empty custom-epsg file -->
+          <execution>
+            <id>copy-resources-epsg-touch</id>
+            <phase>process-classes</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>${project.build.outputDirectory}/data/projection</outputDirectory>
+              <resources>
+                <resource>
+                  <directory>${resources.dir}/data/projection/</directory>
+                  <includes>
+                    <include>custom-epsg</include>
+                  </includes>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+          <execution>
+            <id>copy-resources-epsg</id>
+            <phase>generate-test-resources</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>${project.build.outputDirectory}/data/projection</outputDirectory>
+              <resources>
+                <resource>
+                  <directory>${resources.dir}/data/projection/</directory>
+                  <includes>
+                    <include>custom-epsg</include>
+                  </includes>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <!-- Configure checkstyle/pmd/other lint plugins -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-pmd-plugin</artifactId>
+        <configuration>
+          <analysisCache>true</analysisCache>
+          <analysisCacheLocation>${pmd.dir}/cache</analysisCacheLocation>
+          <language>java</language>
+          <targetJdk>${java.lang.version}</targetJdk>
+          <rulesets>
+            <ruleset>${pmd.dir}/josm-ruleset.xml</ruleset>
+          </rulesets>
+          <includes>
+            <include>**/*.java</include>
+          </includes>
+          <excludes>
+            <exclude>org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/*.java</exclude>
+          </excludes>
+          <printFailingErrors>true</printFailingErrors>
+          <targetDirectory>${project.basedir}</targetDirectory>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>com.github.spotbugs</groupId>
+        <artifactId>spotbugs-maven-plugin</artifactId>
+        <configuration>
+          <xmlOutput>true</xmlOutput>
+          <spotbugsXmlOutputFilename>spotbugs-josm.xml</spotbugsXmlOutputFilename>
+          <effort>max</effort>
+          <excludeFilterFile>${spotbugs.dir}/josm-filter.xml</excludeFilterFile>
+          <onlyAnalyze>org.openstreetmap.josm.-</onlyAnalyze>
+          <threshold>LOW</threshold>
+        </configuration>
+        <!-- This is commented out until all the current bugs are fixed. TODO uncomment!
+        <executions>
+          <execution>
+            <id>validate</id>
+            <phase>validate</phase>
+            <goals>
+              <goal>check</goal>
+            </goals>
+          </execution>
+        </executions>
+        -->
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-checkstyle-plugin</artifactId>
+        <configuration>
+          <configLocation>${checkstyle.dir}/josm_checks.xml</configLocation>
+          <includeTestSourceDirectory>true</includeTestSourceDirectory>
+          <outputFile>${project.basedir}/checkstyle-josm.xml</outputFile>
+          <!-- checkstyle cannot parse module-info.java yet -->
+          <excludes>module-info.java,org/openstreetmap/josm/gui/mappaint/mapcss/parsergen/*.java</excludes>
+        </configuration>
+        <executions>
+          <execution>
+            <id>validate</id>
+            <phase>validate</phase>
+            <goals>
+              <goal>check</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <!-- Configure the test plugin, specifically enable autodetection of global extensions -->
+      <plugin>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <excludes>
+            <exclude>**/*TestIT</exclude>
+          </excludes>
+          <skipAfterFailureCount>1</skipAfterFailureCount>
+          <argLine>-javaagent:${test.dir}/lib/jmockit.jar</argLine>
+          <properties>
+            <configurationParameters>
+              file.encoding = UTF-8
+              java.locale.providers = SPI,CLDR
+              junit.jupiter.extensions.autodetection.enabled = true
+              junit.jupiter.execution.parallel.enabled = true
+            </configurationParameters>
+          </properties>
+          <systemPropertyVariables>
+            <josm.home>${test.dir}/config/josm.home</josm.home>
+            <josm.test.data>${test.dir}/data</josm.test.data>
+            <java.awt.headless>${test.headless}</java.awt.headless>
+            <glass.platform>Monocle</glass.platform>
+            <monocle.platform>Headless</monocle.platform>
+            <prism.order>sw</prism.order>
+          </systemPropertyVariables>
+        </configuration>
+        <executions>
+          <execution>
+            <id>default-tests</id>
+            <phase>test</phase>
+            <goals>
+              <goal>test</goal>
+            </goals>
+          </execution>
+          <execution>
+            <id>integration-tests</id>
+            <phase>integration-test</phase>
+            <goals>
+              <goal>test</goal>
+            </goals>
+            <configuration>
+              <includes>**/*TestIT</includes>
+            </configuration>
+          </execution>
+          <execution>
+            <id>functional-tests</id>
+            <phase>integration-test</phase>
+            <goals>
+              <goal>test</goal>
+            </goals>
+            <configuration>
+              <testSourceDirectory>${test.dir}/functional</testSourceDirectory>
+            </configuration>
+          </execution>
+          <execution>
+            <id>performance-tests</id>
+            <phase>integration-test</phase>
+            <goals>
+              <goal>test</goal>
+            </goals>
+            <configuration>
+              <testSourceDirectory>${test.dir}/performance</testSourceDirectory>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <!-- the clean plugin is needed since we currently store generated sources in the source directory -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-clean-plugin</artifactId>
+        <configuration>
+          <filesets>
+            <fileset>
+              <directory>${proj-build.dir}</directory>
+            </fileset>
+            <fileset>
+              <directory>${build.dir}</directory>
+            </fileset>
+            <fileset>
+              <directory>${script-build.dir}</directory>
+            </fileset>
+            <fileset>
+              <directory>${checkstyle-build.dir}</directory>
+            </fileset>
+            <fileset>
+              <directory>${dist.dir}</directory>
+            </fileset>
+            <fileset>
+              <directory>${mapcss.dir}/parsergen</directory>
+            </fileset>
+            <fileset>
+              <directory>${src.dir}/org/w3/_2001/xmlschema</directory>
+              <includes>
+                <include>Adapter1.java</include>
+              </includes>
+            </fileset>
+            <fileset>
+              <directory>${src.dir}/org/openstreetmap/josm/data/imagery/types</directory>
+            </fileset>
+            <!-- ${epsg.output} -->
+            <fileset>
+              <directory>${resources.dir}/data/projection/</directory>
+              <includes>
+                <include>custom-epsg</include>
+              </includes>
+            </fileset>
+            <fileset>
+              <directory>${pmd.dir}</directory>
+              <includes>
+                <include>cache</include>
+              </includes>
+            </fileset>
+          </filesets>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>buildnumber-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <phase>validate</phase>
+            <goals>
+              <goal>create</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <doCheck>false</doCheck>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-shade-plugin</artifactId>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>shade</goal>
+            </goals>
+            <configuration>
+              <!-- TODO: Do we want to minimize the jar? <minimizeJar>true</minimizeJar> -->
+              <filters>
+                <filter>
+                  <artifact>*:*</artifact>
+                  <excludes>
+                    <!--<exclude>META-INF/*</exclude>
+                    <exclude>META-INF/versions/**</exclude>
+                    <exclude>*</exclude>-->
+                    <exclude>META-INF/maven/**</exclude>
+                  </excludes>
+                </filter>
+                <filter>
+                  <artifact>org.webjars.npm:tag2link</artifact>
+                  <excludes>
+                    <exclude>META-INF/resources/webjars/tag2link/*/LICENSE</exclude>
+                    <exclude>META-INF/resources/webjars/tag2link/*/README.md</exclude>
+                    <exclude>META-INF/resources/webjars/tag2link/*/build.js</exclude>
+                    <exclude>META-INF/resources/webjars/tag2link/*/package.json</exclude>
+                    <exclude>META-INF/resources/webjars/tag2link/*/schema.json</exclude>
+                    <exclude>META-INF/resources/webjars/tag2link/*/tag2link.sophox.sparql</exclude>
+                    <exclude>META-INF/resources/webjars/tag2link/*/tag2link.wikidata.sparql</exclude>
+                  </excludes>
+                </filter>
+                <filter>
+                  <artifact>org.openstreetmap.jmapviewer:jmapviewer</artifact>
+                  <excludes>
+                    <exclude>org/openstreetmap/gui/jmapviewer/Demo*</exclude>
+                  </excludes>
+                </filter>
+                <filter>
+                  <artifact>com.drewnoakes:metadata-extractor</artifact>
+                  <excludes>
+                    <exclude>com/drew/imaging/FileTypeDetector*</exclude>
+                    <exclude>com/drew/imaging/ImageMetadataReader*</exclude>
+                    <exclude>com/drew/imaging/avi/**</exclude>
+                    <exclude>com/drew/imaging/bmp/**</exclude>
+                    <exclude>com/drew/imaging/eps/**</exclude>
+                    <exclude>com/drew/imaging/gif/**</exclude>
+                    <exclude>com/drew/imaging/heif/**</exclude>
+                    <exclude>com/drew/imaging/ico/**</exclude>
+                    <exclude>com/drew/imaging/mp3/**</exclude>
+                    <exclude>com/drew/imaging/mp4/**</exclude>
+                    <exclude>com/drew/imaging/pcx/**</exclude>
+                    <exclude>com/drew/imaging/psd/**</exclude>
+                    <exclude>com/drew/imaging/quicktime/**</exclude>
+                    <exclude>com/drew/imaging/raf/**</exclude>
+                    <exclude>com/drew/imaging/riff/**</exclude>
+                    <exclude>com/drew/imaging/wav/**</exclude>
+                    <exclude>com/drew/imaging/webp/**</exclude>
+                    <exclude>com/drew/metadata/avi/**</exclude>
+                    <exclude>com/drew/metadata/bmp/**</exclude>
+                    <exclude>com/drew/metadata/eps/**</exclude>
+                    <exclude>com/drew/metadata/gif/**</exclude>
+                    <exclude>com/drew/metadata/heif/**</exclude>
+                    <exclude>com/drew/metadata/ico/**</exclude>
+                    <exclude>com/drew/metadata/mov/**</exclude>
+                    <exclude>com/drew/metadata/mp3/**</exclude>
+                    <exclude>com/drew/metadata/mp4/**</exclude>
+                    <exclude>com/drew/metadata/pcx/**</exclude>
+                    <exclude>com/drew/metadata/wav/**</exclude>
+                    <exclude>com/drew/metadata/webp/**</exclude>
+                    <exclude>com/drew/tools/**</exclude>
+                  </excludes>
+                </filter>
+                <filter>
+                  <artifact>com.formdev:svgSalamander</artifact>
+                  <excludes>
+                    <exclude>com/kitfox/svg/app/ant/**</exclude>
+                    <exclude>com/kitfox/svg/app/*Dialog*</exclude>
+                    <exclude>com/kitfox/svg/app/*Frame*</exclude>
+                    <exclude>com/kitfox/svg/app/*Player*</exclude>
+                    <exclude>com/kitfox/svg/app/*Viewer*</exclude>
+                  </excludes>
+                </filter>
+                <filter>
+                  <artifact>org.apache.commons:commons-compress</artifact>
+                  <excludes>
+                    <exclude>org/apache/commons/compress/PasswordRequiredException*</exclude>
+                    <exclude>org/apache/commons/compress/archivers/**</exclude>
+                    <exclude>org/apache/commons/compress/changes/**</exclude>
+                    <exclude>org/apache/commons/compress/compressors/bzip2/BZip2Utils*</exclude>
+                    <exclude>org/apache/commons/compress/compressors/brotli/**</exclude>
+                    <exclude>org/apache/commons/compress/compressors/CompressorStreamFactory*</exclude>
+                    <exclude>org/apache/commons/compress/compressors/CompressorStreamProvider*</exclude>
+                    <exclude>org/apache/commons/compress/compressors/CompressorException*</exclude>
+                    <exclude>org/apache/commons/compress/compressors/FileNameUtil*</exclude>
+                    <exclude>org/apache/commons/compress/compressors/deflate/**</exclude>
+                    <exclude>org/apache/commons/compress/compressors/gzip/**</exclude>
+                    <exclude>org/apache/commons/compress/compressors/lz4/**</exclude>
+                    <exclude>org/apache/commons/compress/compressors/lzma/**</exclude>
+                    <exclude>org/apache/commons/compress/compressors/lz77support/**</exclude>
+                    <exclude>org/apache/commons/compress/compressors/pack200/**</exclude>
+                    <exclude>org/apache/commons/compress/compressors/snappy/**</exclude>
+                    <exclude>org/apache/commons/compress/compressors/xz/XZUtils*</exclude>
+                    <exclude>org/apache/commons/compress/compressors/z/**</exclude>
+                    <exclude>org/apache/commons/compress/compressors/zstandard/**</exclude>
+                    <exclude>org/apache/commons/compress/java/util/jar/Pack200*</exclude>
+                    <exclude>org/apache/commons/compress/harmony/pack200/**</exclude>
+                    <exclude>org/apache/commons/compress/harmony/unpack200/**</exclude>
+                    <exclude>org/apache/commons/compress/parallel/**</exclude>
+                    <exclude>org/apache/commons/compress/utils/ArchiveUtils*</exclude>
+                  </excludes>
+                </filter>
+                <filter>
+                  <artifact>org.apache.commons:commons-jcs3-core</artifact>
+                  <excludes>
+                    <exclude>org/apache/commons/jcs3/auxiliary/disk/jdbc/**</exclude>
+                    <exclude>org/apache/commons/jcs3/auxiliary/remote/http/client/**</exclude>
+                    <exclude>org/apache/commons/jcs3/auxiliary/remote/http/server/RemoteHttpCacheServlet*</exclude>
+                    <exclude>org/apache/commons/jcs3/auxiliary/remote/server/RemoteCacheStartupServlet*</exclude>
+                    <exclude>org/apache/commons/jcs3/log/Log4j2Factory*</exclude>
+                    <exclude>org/apache/commons/jcs3/log/Log4j2LogAdapter*</exclude>
+                    <exclude>org/apache/commons/jcs3/utils/servlet/**</exclude>
+                  </excludes>
+                </filter>
+              </filters>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <configuration>
+          <archive>
+            <manifest>
+              <mainClass>org.openstreetmap.josm.gui.MainApplication</mainClass>
+              <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+              <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
+            </manifest>
+            <manifestEntries>
+              <Main-Version>${buildNumber} SVN</Main-Version>
+              <!-- The default timestamp format is milliseconds since epoch -->
+              <Main-Date>${timestamp}</Main-Date>
+              <Permissions>all-permissions</Permissions>
+              <Codebase>josm.openstreetmap.de</Codebase>
+              <Application-Name>JOSM - Java OpenStreetMap Editor</Application-Name>
+              <Add-Exports>java.base/sun.security.action java.desktop/com.apple.eawt java.desktop/com.sun.imageio.spi java.desktop/com.sun.imageio.plugins.jpeg javafx.graphics/com.sun.javafx.application jdk.deploy/com.sun.deploy.config</Add-Exports>
+              <Add-Opens>java.base/java.lang java.base/java.nio java.base/jdk.internal.loader java.base/jdk.internal.ref java.desktop/javax.imageio.spi java.desktop/javax.swing.text.html java.prefs/java.util.prefs</Add-Opens>
+              <Multi-Release>true</Multi-Release>
+              <Is-Local-Build>true</Is-Local-Build>
+              <foobar>${somthing.not.here}</foobar>
+            </manifestEntries>
+          </archive>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
Index: core/test/pom.xml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/core/test/pom.xml b/core/test/pom.xml
new file mode 100644
--- /dev/null	(date 1715785415231)
+++ b/core/test/pom.xml	(date 1715785415231)
@@ -0,0 +1,113 @@
+<?xml version="1.0"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>josm-unittest</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    <parent>
+        <groupId>org.openstreetmap.josm</groupId>
+        <artifactId>josm-parent</artifactId>
+        <version>1.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.openstreetmap.josm</groupId>
+            <artifactId>josm</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jmockit</groupId>
+            <artifactId>jmockit</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.github.spotbugs</groupId>
+            <artifactId>spotbugs-annotations</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.ginsberg</groupId>
+            <artifactId>junit5-system-exit</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.wiremock</groupId>
+            <artifactId>wiremock</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.github.classgraph</groupId>
+            <artifactId>classgraph</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-suite</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.vintage</groupId>
+            <artifactId>junit-vintage-engine</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-params</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-migrationsupport</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>net.trajano.commons</groupId>
+            <artifactId>commons-testing</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>nl.jqno.equalsverifier</groupId>
+            <artifactId>equalsverifier</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.awaitility</groupId>
+            <artifactId>awaitility</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <sourceDirectory>${project.basedir}/unit</sourceDirectory>
+        <resources>
+            <resource>
+                <directory>${project.basedir}/data</directory>
+            </resource>
+        </resources>
+    </build>
+</project>
\ No newline at end of file
Index: plugins/pom.xml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/plugins/pom.xml b/plugins/pom.xml
new file mode 100644
--- /dev/null	(date 1715876724211)
+++ b/plugins/pom.xml	(date 1715876724211)
@@ -0,0 +1,292 @@
+<?xml version="1.0"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.openstreetmap.josm.plugins</groupId>
+  <artifactId>plugin-root</artifactId>
+  <version>1.0-SNAPSHOT</version>
+
+  <parent>
+    <groupId>org.openstreetmap.josm</groupId>
+    <artifactId>josm-parent</artifactId>
+    <version>1.0-SNAPSHOT</version>
+    <relativePath>../core/pom.xml</relativePath>
+  </parent>
+
+  <name>JOSM Plugins</name>
+  <url>https://josm.openstreetmap.de</url>
+  <properties>
+    <josm>../../core/dist/josm-custom.jar</josm>
+    <josm.test.build.dir>../../core/test/build</josm.test.build.dir>
+    <plugin.tools.dir>../00_tools</plugin.tools.dir>
+    <plugin.build.dir>build</plugin.build.dir>
+    <plugin.test.dir>test</plugin.test.dir>
+    <plugin.test.data.dir>${plugin.test.dir}/data</plugin.test.data.dir>
+    <plugin.test.src.dir>${plugin.test.dir}/unit</plugin.test.src.dir>
+    <plugin.src.dir>src</plugin.src.dir>
+    <!-- most plugins default to resource directories in root, e.g. ./data, ./images, ./resources -->
+    <plugin.resources.dir>${project.basedir}</plugin.resources.dir>
+    <plugin.doc.dir>javadoc</plugin.doc.dir>
+    <plugin.lib.dir>lib</plugin.lib.dir>
+    <!-- this is the directory where the plugin jar is copied to -->
+    <plugin.dist.dir>../../dist</plugin.dist.dir>
+    <javadoc.executable>javadoc</javadoc.executable>
+    <manifest>MANIFEST</manifest>
+    <manifest.unixoid>MANIFEST-unixoid</manifest.unixoid>
+    <manifest.windows>MANIFEST-windows</manifest.windows>
+    <manifest.osx>MANIFEST-osx</manifest.osx>
+    <plugin.compile.version>1.0-SNAPSHOT</plugin.compile.version>
+    <plugin.jar>${project.name}.jar</plugin.jar>
+    <plugin.unixoid.jar>${project.name}-unixoid.jar</plugin.unixoid.jar>
+    <plugin.windows.jar>${project.name}-windows.jar</plugin.windows.jar>
+    <plugin.osx.jar>${project.name}-osx.jar</plugin.osx.jar>
+    <plugin.sources.jar>${project.name}-sources.jar</plugin.sources.jar>
+    <plugin.javadoc.jar>${project.name}-javadoc.jar</plugin.javadoc.jar>
+    <jacoco.inclbootstrapclasses>false</jacoco.inclbootstrapclasses>
+    <jacoco.inclnolocationclasses>false</jacoco.inclnolocationclasses>
+    <junit.printsummary>on</junit.printsummary>
+  </properties>
+  <packaging>pom</packaging>
+  <inceptionYear>2005</inceptionYear>
+  <licenses>
+    <license>
+      <name>GPL-2.0-or-later</name>
+      <url>https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html</url>
+      <distribution>repo</distribution>
+    </license>
+  </licenses>
+  <organization>
+    <name>JOSM</name>
+    <url>https://josm.openstreetmap.de</url>
+  </organization>
+  <scm>
+    <connection>scm:svn:https://josm.openstreetmap.de/svn/trunk</connection>
+    <url>https://josm.openstreetmap.de/browser/josm/trunk</url>
+  </scm>
+  <issueManagement>
+    <system>Trac</system>
+    <url>https://josm.openstreetmap.de</url>
+  </issueManagement>
+  <mailingLists>
+    <mailingList>
+      <name>josm-dev</name>
+      <archive>https://lists.openstreetmap.org/pipermail/josm-dev/</archive>
+      <post>josm-dev@openstreetmap.org</post>
+    </mailingList>
+  </mailingLists>
+  <modules>
+    <module>../core</module>
+    <module>apache-commons</module>
+    <module>apache-http</module>
+  </modules>
+  <dependencies>
+    <dependency>
+      <groupId>org.openstreetmap.josm</groupId>
+      <artifactId>josm</artifactId>
+      <version>${plugin.compile.version}</version>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.openstreetmap.josm</groupId>
+        <artifactId>josm-unittest</artifactId>
+        <version>1.0-SNAPSHOT</version>
+        <scope>test</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+  <build>
+    <sourceDirectory>${plugin.src.dir}</sourceDirectory>
+    <testSourceDirectory>${plugin.test.src.dir}</testSourceDirectory>
+    <resources>
+      <resource>
+        <directory>${plugin.resources.dir}/data</directory>
+        <targetPath>data</targetPath>
+      </resource>
+      <resource>
+        <directory>${plugin.resources.dir}/images</directory>
+        <targetPath>images</targetPath>
+      </resource>
+      <resource>
+        <directory>${plugin.resources.dir}/resources</directory>
+        <targetPath>resources</targetPath>
+      </resource>
+    </resources>
+    <testResources>
+      <testResource>
+        <directory>${plugin.test.data.dir}</directory>
+      </testResource>
+    </testResources>
+    <pluginManagement>
+      <plugins>
+        <!-- Configure checkstyle/pmd/other lint plugins -->
+        <plugin>
+          <groupId>com.github.spotbugs</groupId>
+          <artifactId>spotbugs-maven-plugin</artifactId>
+          <version>4.8.1.0</version>
+          <configuration>
+            <xmlOutput>true</xmlOutput>
+            <spotbugsXmlOutputFilename>spotbugs-josm.xml</spotbugsXmlOutputFilename>
+            <effort>max</effort>
+            <excludeFilterFile>${spotbugs.dir}/josm-filter.xml</excludeFilterFile>
+            <onlyAnalyze>org.openstreetmap.josm.-</onlyAnalyze>
+            <threshold>LOW</threshold>
+          </configuration>
+          <!-- This is commented out until all the current bugs are fixed. TODO uncomment!
+          <executions>
+            <execution>
+              <id>validate</id>
+              <phase>validate</phase>
+              <goals>
+                <goal>check</goal>
+              </goals>
+            </execution>
+          </executions>
+          -->
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-checkstyle-plugin</artifactId>
+          <version>3.3.1</version>
+          <configuration>
+            <configLocation>${project.basedir}/../checkstyle-config.xml</configLocation>
+            <includeTestSourceDirectory>true</includeTestSourceDirectory>
+            <outputFile>${project.basedir}/checkstyle-josm-${project.name}.xml</outputFile>
+            <!-- checkstyle cannot parse module-info.java yet -->
+            <excludes>module-info.java</excludes>
+          </configuration>
+          <executions>
+            <execution>
+              <id>validate</id>
+              <phase>validate</phase>
+              <goals>
+                <goal>check</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+        <!-- Configure the test plugin, specifically enable autodetection of global extensions -->
+        <plugin>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>3.2.5</version>
+          <configuration>
+            <skipAfterFailureCount>1</skipAfterFailureCount>
+            <argLine>-javaagent:"${settings.localRepository}"/org/jmockit/jmockit/${jmockit.version}/jmockit-${jmockit.version}.jar</argLine>
+            <properties>
+              <configurationParameters>
+                file.encoding = UTF-8
+                java.locale.providers = SPI,CLDR
+                junit.jupiter.extensions.autodetection.enabled = true
+                junit.jupiter.execution.parallel.enabled = true
+              </configurationParameters>
+            </properties>
+            <systemPropertyVariables>
+              <josm.home>${plugin.test.dir}/config/josm.home</josm.home>
+              <josm.test.data>${plugin.test.data.dir}</josm.test.data>
+              <java.awt.headless>${test.headless}</java.awt.headless>
+              <glass.platform>Monocle</glass.platform>
+              <monocle.platform>Headless</monocle.platform>
+              <prism.order>sw</prism.order>
+            </systemPropertyVariables>
+          </configuration>
+        </plugin>
+        <!-- the clean plugin is needed since we currently store generated sources in the source directory -->
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-clean-plugin</artifactId>
+          <version>3.3.2</version>
+          <configuration>
+            <filesets>
+              <fileset>
+                <directory>${plugin.build.dir}</directory>
+              </fileset>
+              <fileset>
+                <directory>${plugin.dist.dir}</directory>
+                <includes>
+                  <include>${plugin.jar}</include>
+                  <include>${plugin.unixoid.jar}</include>
+                  <include>${plugin.windows.jar}</include>
+                  <include>${plugin.osx.jar}</include>
+                  <include>${plugin.sources.jar}</include>
+                  <include>${plugin.javadoc.jar}</include>
+                </includes>
+              </fileset>
+              <fileset>
+                <directory>${project.basedir}</directory>
+                <includes>
+                  <include>checkstyle-josm-${project.name}.xml</include>
+                </includes>
+              </fileset>
+            </filesets>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>com.diffplug.spotless</groupId>
+          <artifactId>spotless-maven-plugin</artifactId>
+          <version>2.43.0</version>
+          <configuration>
+            <java>
+              <eclipse>
+                <version>4.21.0</version>
+                <file>${project.basedir}/../00_core_tools/eclipse/formatter.xml</file>
+              </eclipse>
+              <removeUnusedImports/>
+              <licenseHeader>
+                <content>// License: GPL. For details, see LICENSE file.</content>
+              </licenseHeader>
+            </java>
+          </configuration>
+          <executions>
+            <execution>
+              <goals>
+                <goal>check</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-shade-plugin</artifactId>
+          <version>3.5.3</version>
+          <executions>
+            <execution>
+              <phase>package</phase>
+              <goals>
+                <goal>shade</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-jar-plugin</artifactId>
+          <configuration>
+            <archive>
+              <manifestEntries>
+                <!-- For full documentation, see https://josm.openstreetmap.de/wiki/DevelopersGuide/DevelopingPlugins#ThemanifestfileforaJOSMplugin -->
+                <Plugin-Mainversion>${plugin.main.version}</Plugin-Mainversion>
+                <Plugin-Version>${project.version}</Plugin-Version>
+                <Plugin-Class>${plugin.class}</Plugin-Class>
+                <Plugin-Description>${plugin.description}</Plugin-Description>
+                <Author>${plugin.author}</Author>
+                <Plugin-Minimum-Java-Version>${plugin.minimum.java.version}</Plugin-Minimum-Java-Version>
+                <!-- plugin.platform must be `Windows`, `Osx`, or `Unixoid` -->
+                <Plugin-Platform>${plugin.platform}</Plugin-Platform>
+                <Plugin-Provides>${plugin.provides}</Plugin-Provides>
+                <Plugin-Date>${maven.build.timestamp}</Plugin-Date>
+                <Plugin-Early>${plugin.early}</Plugin-Early>
+                <Plugin-Link>${plugin.link}</Plugin-Link>
+                <Plugin-Icon>${plugin.icon}</Plugin-Icon>
+                <Plugin-Requires>${plugin.requires}</Plugin-Requires>
+                <Plugin-Canloadatruntime>${plugin.canloadatruntime}</Plugin-Canloadatruntime>
+                <Class-Path>${plugin.classpath}</Class-Path>
+                <!-- Additional entries: <xxx>_Plugin-Url (doesn't work well with xml) and <lang>_Plugin_Description -->
+              </manifestEntries>
+            </archive>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>
