Repository: quarkusio/quarkus
Issue: `-Dquarkus.platform.version` is not honored during reload of dev mode 

### Describe the bug

Custom `-Dquarkus.platform.version` is not honored during reload of dev mode, version defined in pom.xml gets picked 

I have triggered the reload by removal of `quarkus-arc` dependency from pom.xml
Dev mode was started using `mvn quarkus:dev -Dquarkus.platform.version=2.7.5.Final`

Once the change of `pom.xml` was detected I had seen a lot of downloads of 2.8.2.Final bits and then the  dev mode exited saying that the version of Quarkus was changed.

```
...
                                                                                                                                                                                Downloaded from central: https://repo.maven.apache.org/maven2/io/quarkus/quarkus-core-deployment/2.8.2.Final/quarkus-core-deployment-2.8.2.Final.jar (1.2 MB at 959 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/io/quarkus/quarkus-vertx-http-deployment/2.8.2.Final/quarkus-vertx-http-deployment-2.8.2.Final.jar (2.2 MB at 1.4 MB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/io/quarkus/quarkus-bootstrap-gradle-resolver/2.8.2.Final/quarkus-bootstrap-gradle-resolver-2.8.2.Final.jar (2.4 MB at 1.5 MB/s)
Downloading from central: https://repo.maven.apache.org/maven2/io/quarkus/platform/quarkus-bom-quarkus-platform-properties/2.8.2.Final/quarkus-bom-quarkus-platform-properties-2.8.2.Final.properties
Downloaded from central: https://repo.maven.apache.org/maven2/io/quarkus/platform/quarkus-bom-quarkus-platform-properties/2.8.2.Final/quarkus-bom-quarkus-platform-properties-2.2022-04-26 22:28:55,037 INFO  [io.quarkus] (Shutdown thread) code-with-quarkus stopped in 0.024s


--
Press [:] for the terminal, [h] for more options>
Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: java.lang.IllegalStateException: Hot deployment of the application is not supported when updating the Quarkus version. The application needs to be stopped and dev mode started up again
	at io.quarkus.deployment.dev.DevModeMain.start(DevModeMain.java:138)
	at io.quarkus.deployment.dev.DevModeMain.main(DevModeMain.java:62)
Caused by: java.lang.RuntimeException: java.lang.IllegalStateException: Hot deployment of the application is not supported when updating the Quarkus version. The application needs to be stopped and dev mode started up again
	at io.quarkus.bootstrap.app.CuratedApplication.runInCl(CuratedApplication.java:143)
	at io.quarkus.bootstrap.app.CuratedApplication.runInAugmentClassLoader(CuratedApplication.java:96)
	at io.quarkus.deployment.dev.DevModeMain.start(DevModeMain.java:132)
	... 1 more
Caused by: java.lang.IllegalStateException: Hot deployment of the application is not supported when updating the Quarkus version. The application needs to be stopped and dev mode started up again
	at io.quarkus.deployment.dev.IsolatedDevModeMain.close(IsolatedDevModeMain.java:367)
	at io.quarkus.deployment.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:512)
	at io.quarkus.deployment.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:68)
	at io.quarkus.bootstrap.app.CuratedApplication.runInCl(CuratedApplication.java:140)
	... 3 more
```

As the application in the dev mode runs using the version specified using `-Dquarkus.platform.version=` property I would expect the same version to be used after reload

### Expected behavior

Custom `-Dquarkus.platform.version` is honored during reload of dev mode

### Actual behavior

Custom `-Dquarkus.platform.version` is not honored during reload of dev mode, version defined in pom.xml gets picked 


### How to Reproduce?

 - download app from https://code.quarkus.io/?e=resteasy-reactive
 - open pom.xml
 - run `mvn quarkus:dev -Dquarkus.platform.version=2.7.5.Final`
 - remove `quarkus-arc` dependency 
 - check the console

### Output of `uname -a` or `ver`

macOS Monterey

### Output of `java -version`

Java 17

### GraalVM version (if different from Java)

_No response_

### Quarkus version or git rev

2.8.2.Final

### Build tool (ie. output of `mvnw --version` or `gradlew --version`)

_No response_

### Additional information

_No response_

Changed files:
independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/workspace/LocalProject.java
independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/BootstrapModelResolver.java
independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/MavenModelBuilder.java
independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/workspace/LocalWorkspace.java
independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/BootstrapAppModelResolver.java
devtools/maven/src/main/java/io/quarkus/maven/DevMojo.java

diff --git a/devtools/maven/src/main/java/io/quarkus/maven/DevMojo.java b/devtools/maven/src/main/java/io/quarkus/maven/DevMojo.java
index 82601628f75..212bef2d92d 100644
--- a/devtools/maven/src/main/java/io/quarkus/maven/DevMojo.java
+++ b/devtools/maven/src/main/java/io/quarkus/maven/DevMojo.java
@@ -990,7 +990,6 @@ private QuarkusDevModeLauncher newLauncher() throws Exception {
             bootstrapProvider.close();
         } else {
             final MavenArtifactResolver.Builder resolverBuilder = MavenArtifactResolver.builder()
-                    .setRepositorySystem(repoSystem)
                     .setRemoteRepositories(repos)
                     .setRemoteRepositoryManager(remoteRepositoryManager)
                     .setWorkspaceDiscovery(true)
@@ -1002,16 +1001,18 @@ private QuarkusDevModeLauncher newLauncher() throws Exception {
             boolean reinitializeMavenSession = Files.exists(appModelLocation);
             if (reinitializeMavenSession) {
                 Files.delete(appModelLocation);
+                // we can't re-use the repo system because we want to use our interpolating model builder
+                // a use-case where it fails with the original repo system is when dev mode is launched with -Dquarkus.platform.version=xxx
+                // overriding the version of the quarkus-bom in the pom.xml
             } else {
                 // we can re-use the original Maven session
-                resolverBuilder.setRepositorySystemSession(repoSession);
+                resolverBuilder.setRepositorySystemSession(repoSession).setRepositorySystem(repoSystem);
             }
 
             appModel = new BootstrapAppModelResolver(resolverBuilder.build())
                     .setDevMode(true)
                     .setCollectReloadableDependencies(!noDeps)
-                    .resolveModel(new GACTV(project.getGroupId(), project.getArtifactId(), null, ArtifactCoords.TYPE_JAR,
-                            project.getVersion()));
+                    .resolveModel(GACTV.jar(project.getGroupId(), project.getArtifactId(), project.getVersion()));
         }
 
         // serialize the app model to avoid re-resolving it in the dev process
diff --git a/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/BootstrapAppModelResolver.java b/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/BootstrapAppModelResolver.java
index 31f965bafee..fd0475a0811 100644
--- a/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/BootstrapAppModelResolver.java
+++ b/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/BootstrapAppModelResolver.java
@@ -259,8 +259,8 @@ private ApplicationModel doResolveModel(ArtifactCoords coords,
         }
         final Artifact mvnArtifact = toAetherArtifact(coords);
 
-        List<Dependency> managedDeps = Collections.emptyList();
-        List<RemoteRepository> managedRepos = Collections.emptyList();
+        List<Dependency> managedDeps = List.of();
+        List<RemoteRepository> managedRepos = List.of();
         if (managingProject != null) {
             final ArtifactDescriptorResult managingDescr = mvn.resolveDescriptor(toAetherArtifact(managingProject));
             managedDeps = managingDescr.getManagedDependencies();
@@ -271,14 +271,14 @@ private ApplicationModel doResolveModel(ArtifactCoords coords,
 
         final List<String> excludedScopes;
         if (test) {
-            excludedScopes = Collections.emptyList();
+            excludedScopes = List.of();
         } else if (devmode) {
-            excludedScopes = Collections.singletonList("test");
+            excludedScopes = List.of("test");
         } else {
             excludedScopes = List.of("provided", "test");
         }
 
-        DependencyNode resolvedDeps = mvn.resolveManagedDependencies(mvnArtifact,
+        final DependencyNode resolvedDeps = mvn.resolveManagedDependencies(mvnArtifact,
                 directMvnDeps, managedDeps, managedRepos, excludedScopes.toArray(new String[0])).getRoot();
 
         ArtifactDescriptorResult appArtifactDescr = mvn.resolveDescriptor(toAetherArtifact(appArtifact));
diff --git a/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/BootstrapModelResolver.java b/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/BootstrapModelResolver.java
index 979ad84c416..086c8e5a278 100644
--- a/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/BootstrapModelResolver.java
+++ b/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/BootstrapModelResolver.java
@@ -1,6 +1,7 @@
 package io.quarkus.bootstrap.resolver.maven;
 
 import io.quarkus.bootstrap.resolver.maven.workspace.LocalWorkspace;
+import io.quarkus.maven.dependency.ArtifactCoords;
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -203,7 +204,7 @@ public ModelSource resolveModel(final Dependency dependency)
             throws UnresolvableModelException {
         try {
             final Artifact artifact = new DefaultArtifact(dependency.getGroupId(), dependency.getArtifactId(), "",
-                    "pom", dependency.getVersion());
+                    ArtifactCoords.TYPE_POM, dependency.getVersion());
 
             final VersionRangeRequest versionRangeRequest = new VersionRangeRequest(artifact, repositories, context);
             versionRangeRequest.setTrace(trace);
diff --git a/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/MavenModelBuilder.java b/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/MavenModelBuilder.java
index 3a3d39bc40d..2b25e09de8b 100644
--- a/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/MavenModelBuilder.java
+++ b/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/MavenModelBuilder.java
@@ -3,6 +3,7 @@
 import io.quarkus.bootstrap.resolver.maven.options.BootstrapMavenOptions;
 import io.quarkus.bootstrap.resolver.maven.workspace.LocalWorkspace;
 import io.quarkus.bootstrap.resolver.maven.workspace.ModelUtils;
+import io.quarkus.maven.dependency.ArtifactCoords;
 import java.io.File;
 import java.io.IOException;
 import java.util.HashSet;
@@ -40,7 +41,7 @@ public ModelBuildingResult build(ModelBuildingRequest request) throws ModelBuild
             final Model requestModel = getModel(request);
             if (requestModel != null) {
                 final Artifact artifact = new DefaultArtifact(ModelUtils.getGroupId(requestModel), requestModel.getArtifactId(),
-                        null, "pom",
+                        null, ArtifactCoords.TYPE_POM,
                         ModelUtils.getVersion(requestModel));
                 if (workspace.findArtifact(artifact) != null) {
                     final ModelBuildingResult result = workspace
diff --git a/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/workspace/LocalProject.java b/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/workspace/LocalProject.java
index f425202e472..ff9825075ef 100644
--- a/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/workspace/LocalProject.java
+++ b/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/workspace/LocalProject.java
@@ -408,7 +408,9 @@ private String resolveElementValue(String elementValue) {
         if (elementValue == null || elementValue.isEmpty() || !(elementValue.startsWith("${") && elementValue.endsWith("}"))) {
             return elementValue;
         }
-        return rawModel.getProperties().getProperty(elementValue.substring(2, elementValue.length() - 1), elementValue);
+        final String propName = elementValue.substring(2, elementValue.length() - 1);
+        String v = System.getProperty(propName);
+        return v == null ? rawModel.getProperties().getProperty(propName, elementValue) : v;
     }
 
     private DefaultArtifactSources processJarPluginExecutionConfig(Object config, boolean test) {
diff --git a/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/workspace/LocalWorkspace.java b/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/workspace/LocalWorkspace.java
index 3b38e304b43..94522979413 100644
--- a/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/workspace/LocalWorkspace.java
+++ b/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/workspace/LocalWorkspace.java
@@ -109,7 +109,7 @@ public File findArtifact(Artifact artifact) {
         if (ArtifactCoords.TYPE_POM.equals(artifact.getExtension())) {
             final File pom = lp.getRawModel().getPomFile();
             // if the pom exists we should also check whether the main artifact can also be resolved from the workspace
-            if (pom.exists() && ("pom".equals(lp.getRawModel().getPackaging())
+            if (pom.exists() && (ArtifactCoords.TYPE_POM.equals(lp.getRawModel().getPackaging())
                     || mvnCtx != null && mvnCtx.isPreferPomsFromWorkspace()
                     || Files.exists(lp.getOutputDir())
                     || emptyJarOutput(lp, artifact) != null)) {