Index: trunk/.classpath
===================================================================
--- trunk/.classpath	(revision 19096)
+++ 	(revision )
@@ -1,48 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry excluding="org/apache/commons/compress/PasswordRequiredException.java|org/apache/commons/compress/archivers/|org/apache/commons/compress/changes/|org/apache/commons/compress/compressors/CompressorException.java|org/apache/commons/compress/compressors/CompressorStreamFactory.java|org/apache/commons/compress/compressors/CompressorStreamProvider.java|org/apache/commons/compress/compressors/FileNameUtil.java|org/apache/commons/compress/compressors/brotli/|org/apache/commons/compress/compressors/bzip2/BZip2Utils.java|org/apache/commons/compress/compressors/deflate/|org/apache/commons/compress/compressors/gzip/|org/apache/commons/compress/compressors/lz4/|org/apache/commons/compress/compressors/lz77support/|org/apache/commons/compress/compressors/lzma/|org/apache/commons/compress/compressors/pack200/|org/apache/commons/compress/compressors/snappy/|org/apache/commons/compress/compressors/xz/XZUtils.java|org/apache/commons/compress/compressors/z/|org/apache/commons/compress/compressors/zstandard/|org/apache/commons/compress/parallel/|org/apache/commons/compress/utils/ArchiveUtils.java|org/apache/commons/jcs3/JCS.java|org/apache/commons/jcs3/access/GroupCacheAccess.java|org/apache/commons/jcs3/access/PartitionedCacheAccess.java|org/apache/commons/jcs3/access/behavior/IGroupCacheAccess.java|org/apache/commons/jcs3/access/exception/InvalidGroupException.java|org/apache/commons/jcs3/admin/servlet/|org/apache/commons/jcs3/auxiliary/AbstractAuxiliaryCacheMonitor.java|org/apache/commons/jcs3/auxiliary/disk/jdbc/|org/apache/commons/jcs3/auxiliary/lateral/|org/apache/commons/jcs3/auxiliary/remote/AbstractRemoteAuxiliaryCache.java|org/apache/commons/jcs3/auxiliary/remote/AbstractRemoteCacheListener.java|org/apache/commons/jcs3/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java|org/apache/commons/jcs3/auxiliary/remote/RemoteCache.java|org/apache/commons/jcs3/auxiliary/remote/RemoteCacheFactory.java|org/apache/commons/jcs3/auxiliary/remote/RemoteCacheFailoverRunner.java|org/apache/commons/jcs3/auxiliary/remote/RemoteCacheListener.java|org/apache/commons/jcs3/auxiliary/remote/RemoteCacheManager.java|org/apache/commons/jcs3/auxiliary/remote/RemoteCacheMonitor.java|org/apache/commons/jcs3/auxiliary/remote/RemoteCacheNoWait.java|org/apache/commons/jcs3/auxiliary/remote/RemoteCacheNoWaitFacade.java|org/apache/commons/jcs3/auxiliary/remote/RemoteCacheRestore.java|org/apache/commons/jcs3/auxiliary/remote/http/|org/apache/commons/jcs3/auxiliary/remote/server/RemoteCacheStartupServlet.java|org/apache/commons/jcs3/auxiliary/remote/server/TimeoutConfigurableRMISocketFactory.java|org/apache/commons/jcs3/engine/CacheAdaptor.java|org/apache/commons/jcs3/engine/CacheGroup.java|org/apache/commons/jcs3/engine/CacheWatchRepairable.java|org/apache/commons/jcs3/engine/ZombieCacheService.java|org/apache/commons/jcs3/engine/ZombieCacheServiceNonLocal.java|org/apache/commons/jcs3/engine/ZombieCacheWatch.java|org/apache/commons/jcs3/engine/logging/CacheEventLoggerDebugLogger.java|org/apache/commons/jcs3/utils/access/|org/apache/commons/jcs3/utils/discovery/|org/apache/commons/jcs3/utils/net/|org/apache/commons/jcs3/utils/props/|org/apache/commons/jcs3/utils/servlet/|org/apache/commons/logging/impl/AvalonLogger.java|org/apache/commons/logging/impl/Jdk13LumberjackLogger.java|org/apache/commons/logging/impl/Log4JLogger.java|org/apache/commons/logging/impl/LogKitLogger.java|org/apache/commons/logging/impl/ServletContextCleaner.java|org/openstreetmap/gui/jmapviewer/Demo.java|org/openstreetmap/gui/jmapviewer/JMapViewerTree.java|org/openstreetmap/gui/jmapviewer/checkBoxTree/" kind="src" path="src"/>
-	<classpathentry including="META-INF/**" kind="src" output="bintest" path="test/data">
-		<attributes>
-			<attribute name="test" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" path="resources"/>
-	<classpathentry kind="src" output="bintest" path="test/unit">
-		<attributes>
-			<attribute name="test" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" output="bintest" path="test/functional">
-		<attributes>
-			<attribute name="test" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" output="bintest" path="test/performance">
-		<attributes>
-			<attribute name="test" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" output="bintest" path="scripts">
-		<attributes>
-			<attribute name="test" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5">
-		<attributes>
-			<attribute name="test" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry exported="true" kind="con" path="org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/?project=JOSM&amp;ivyXmlPath=ivy.xml&amp;confs=*&amp;ivySettingsPath=ivysettings.xml&amp;loadSettingsOnDemand=false&amp;ivyUserDir=&amp;propertyFiles="/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
-		<attributes>
-			<attribute name="module" value="true"/>
-		</attributes>
-		<accessrules>
-			<accessrule kind="discouraged" pattern="sun/security/**"/>
-			<accessrule kind="discouraged" pattern="javafx/scene/media/**"/>
-			<accessrule kind="discouraged" pattern="com/sun/javafx/application/PlatformImpl"/>
-			<accessrule kind="discouraged" pattern="javafx/util/Duration"/>
-		</accessrules>
-	</classpathentry>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
Index: trunk/.project
===================================================================
--- trunk/.project	(revision 19096)
+++ 	(revision )
@@ -1,53 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>JOSM</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>sf.eclipse.javacc.javaccbuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
-			<triggers>full,incremental,</triggers>
-			<arguments>
-				<dictionary>
-					<key>LaunchConfigHandle</key>
-					<value>&lt;project&gt;/.externalToolBuilders/revision.launch</value>
-				</dictionary>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>net.sourceforge.pmd.eclipse.plugin.pmdBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.sonarlint.eclipse.core.sonarlintNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.sonar.ide.eclipse.core.sonarNature</nature>
-		<nature>sf.eclipse.javacc.javaccnature</nature>
-		<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
-		<nature>org.apache.ivyde.eclipse.ivynature</nature>
-		<nature>net.sourceforge.pmd.eclipse.plugin.pmdNature</nature>
-	</natures>
-</projectDescription>
Index: trunk/nodist/pom.xml
===================================================================
--- trunk/nodist/pom.xml	(revision 19097)
+++ trunk/nodist/pom.xml	(revision 19097)
@@ -0,0 +1,344 @@
+<?xml version="1.0"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" 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>
+        <sonar.host.url>https://josm.openstreetmap.de/sonar/</sonar.host.url>
+        <sonar.projectKey>JOSM</sonar.projectKey>
+        <jmockit.version>1.49.a</jmockit.version>
+    </properties>
+    <modules>
+        <module>..</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>
+    <pluginRepositories>
+        <pluginRepository>
+            <id>JOSM-central</id>
+            <url>https://josm.openstreetmap.de/nexus/content/repositories/central/</url>
+        </pluginRepository>
+    </pluginRepositories>
+    <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>
+                <!-- Used to merge compile dependencies into jars -->
+                <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>
+                            <configuration>
+                                <filters>
+                                    <filter>
+                                        <artifact>*:*</artifact>
+                                        <excludes>
+                                            <!--<exclude>META-INF/*</exclude>-->
+                                            <!--<exclude>*</exclude>-->
+                                            <exclude>META-INF/versions/*</exclude>
+                                            <exclude>META-INF/maven/**</exclude>
+                                            <exclude>META-INF/*.SF</exclude>
+                                            <exclude>META-INF/*.DSA</exclude>
+                                            <exclude>META-INF/*.RSA</exclude>
+                                        </excludes>
+                                    </filter>
+                                </filters>
+                            </configuration>
+                        </execution>
+                    </executions>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-jar-plugin</artifactId>
+                    <version>3.4.1</version>
+                    <configuration>
+                        <archive>
+                            <addMavenDescriptor>false</addMavenDescriptor>
+                        </archive>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>org.sonarsource.scanner.maven</groupId>
+                    <artifactId>sonar-maven-plugin</artifactId>
+                    <version>3.7.0.1746</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>8</version>
+                                </requireJavaVersion>
+                            </rules>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+                <version>3.3.1</version>
+                <executions>
+                    <execution>
+                        <id>copy-root-resources</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.basedir}/target/classes</outputDirectory>
+                            <resources>
+                                <resource>
+                                    <directory>${project.basedir}</directory>
+                                    <includes>
+                                        <include>GPL-v2.0.txt</include>
+                                        <include>GPL-v3.0.txt</include>
+                                        <include>LICENSE</include>
+                                        <include>LICENSE.md</include>
+                                        <include>README</include>
+                                        <include>README.md</include>
+                                    </includes>
+                                </resource>
+                            </resources>
+                        </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>provided</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>${jmockit.version}</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.6.0</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>
Index: trunk/pom.xml
===================================================================
--- trunk/pom.xml	(revision 19097)
+++ trunk/pom.xml	(revision 19097)
@@ -0,0 +1,763 @@
+<?xml version="1.0"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>josm</artifactId>
+  <parent>
+    <groupId>org.openstreetmap.josm</groupId>
+    <artifactId>josm-parent</artifactId>
+    <version>1.0-SNAPSHOT</version>
+    <relativePath>./nodist/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>
+    <dependency>
+      <groupId>org.jmockit</groupId>
+      <artifactId>jmockit</artifactId>
+    </dependency>
+    <!-- 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>
+      <scope>runtime</scope>
+    </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>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>
+          <!-- We might need @{argLine} in the future if another plugin has issues -->
+          <argLine>
+            -javaagent:"${settings.localRepository}"/org/jmockit/jmockit/${jmockit.version}/jmockit-${jmockit.version}.jar
+            --add-opens java.base/java.io=ALL-UNNAMED
+            --add-opens java.base/java.lang=ALL-UNNAMED
+            --add-opens java.base/java.nio=ALL-UNNAMED
+            --add-opens java.base/java.text=ALL-UNNAMED
+            --add-opens java.base/java.util=ALL-UNNAMED
+            --add-opens java.base/jdk.internal.loader=ALL-UNNAMED
+            --add-opens java.desktop/java.awt=ALL-UNNAMED
+            --add-opens java.prefs/java.util.prefs=ALL-UNNAMED
+          </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>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>
+            </manifestEntries>
+          </archive>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
Index: trunk/scripts/BuildProjectionDefinitions.java
===================================================================
--- trunk/scripts/BuildProjectionDefinitions.java	(revision 19096)
+++ trunk/scripts/BuildProjectionDefinitions.java	(revision 19097)
@@ -14,4 +14,5 @@
 import java.util.Map;
 import java.util.TreeMap;
+import java.util.logging.Logger;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -85,4 +86,17 @@
     }
 
+    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);
@@ -107,4 +121,7 @@
 
     static void buildList(String baseDir) throws IOException {
+        if (touchCustomEpsg(baseDir)) {
+            return;
+        }
         initMap(baseDir, JOSM_EPSG_FILE, epsgJosm);
         initMap(baseDir, PROJ4_EPSG_FILE, epsgProj4);
@@ -243,5 +260,5 @@
                 "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;
         }
Index: trunk/test/pom.xml
===================================================================
--- trunk/test/pom.xml	(revision 19097)
+++ trunk/test/pom.xml	(revision 19097)
@@ -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>../nodist/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>
