mirror of
https://github.com/apache/maven-mvnd.git
synced 2025-09-10 13:15:27 +00:00
Add an intermediary classloader so that sisu is not in the main classloader as it causes problems with the javac compiler and processors
This commit is contained in:
@@ -188,16 +188,8 @@ public class Client {
|
|||||||
Path workingDir = Layout.userDir();
|
Path workingDir = Layout.userDir();
|
||||||
String command = "";
|
String command = "";
|
||||||
try {
|
try {
|
||||||
String classpath =
|
String url = ServerMain.class.getClassLoader().getResource(Server.class.getName().replace('.', '/') + ".class").toString();
|
||||||
Stream.concat(
|
String classpath = url.substring("file:jar:".length(), url.indexOf('!'));
|
||||||
Stream.concat(Files.list(mavenHome.resolve("lib/ext")),
|
|
||||||
Files.list(mavenHome.resolve("lib")))
|
|
||||||
.filter(p -> p.getFileName().toString().endsWith(".jar"))
|
|
||||||
.filter(Files::isRegularFile),
|
|
||||||
Stream.of(mavenHome.resolve("conf"), mavenHome.resolve("conf/logging")))
|
|
||||||
.map(Path::normalize)
|
|
||||||
.map(Path::toString)
|
|
||||||
.collect(Collectors.joining(":"));
|
|
||||||
String java = ScriptUtils.isWindows() ? "bin\\java.exe" : "bin/java";
|
String java = ScriptUtils.isWindows() ? "bin\\java.exe" : "bin/java";
|
||||||
List<String> args = new ArrayList<>();
|
List<String> args = new ArrayList<>();
|
||||||
args.add("\"" + javaHome.resolve(java) + "\"");
|
args.add("\"" + javaHome.resolve(java) + "\"");
|
||||||
@@ -214,7 +206,7 @@ public class Client {
|
|||||||
args.add("-D" + Server.DAEMON_IDLE_TIMEOUT + "=" + System.getProperty(Server.DAEMON_IDLE_TIMEOUT));
|
args.add("-D" + Server.DAEMON_IDLE_TIMEOUT + "=" + System.getProperty(Server.DAEMON_IDLE_TIMEOUT));
|
||||||
}
|
}
|
||||||
|
|
||||||
args.add(Server.class.getName());
|
args.add(ServerMain.class.getName());
|
||||||
command = String.join(" ", args);
|
command = String.join(" ", args);
|
||||||
|
|
||||||
LOGGER.debug("Starting daemon process: uid = {}, workingDir = {}, daemonArgs: {}", uid, workingDir, command);
|
LOGGER.debug("Starting daemon process: uid = {}, workingDir = {}, daemonArgs: {}", uid, workingDir, command);
|
||||||
|
@@ -51,7 +51,7 @@ import static org.jboss.fuse.mvnd.daemon.DaemonState.Busy;
|
|||||||
import static org.jboss.fuse.mvnd.daemon.DaemonState.StopRequested;
|
import static org.jboss.fuse.mvnd.daemon.DaemonState.StopRequested;
|
||||||
import static org.jboss.fuse.mvnd.daemon.DaemonState.Stopped;
|
import static org.jboss.fuse.mvnd.daemon.DaemonState.Stopped;
|
||||||
|
|
||||||
public class Server implements AutoCloseable {
|
public class Server implements AutoCloseable, Runnable {
|
||||||
|
|
||||||
public static final String DAEMON_IDLE_TIMEOUT = "daemon.idleTimeout";
|
public static final String DAEMON_IDLE_TIMEOUT = "daemon.idleTimeout";
|
||||||
|
|
||||||
@@ -74,19 +74,7 @@ public class Server implements AutoCloseable {
|
|||||||
private final Lock stateLock = new ReentrantLock();
|
private final Lock stateLock = new ReentrantLock();
|
||||||
private final Condition condition = stateLock.newCondition();
|
private final Condition condition = stateLock.newCondition();
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
public Server(String uid) throws IOException {
|
||||||
String uid = System.getProperty("daemon.uid");
|
|
||||||
String mavenHome = System.getProperty("maven.home");
|
|
||||||
if (uid == null || mavenHome == null) {
|
|
||||||
throw new IllegalStateException("The system properties 'daemon.uid' and 'maven.home' must be valid");
|
|
||||||
}
|
|
||||||
|
|
||||||
try (Server server = new Server(uid)) {
|
|
||||||
server.run();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Server(String uid) throws IOException {
|
|
||||||
this.uid = uid;
|
this.uid = uid;
|
||||||
try {
|
try {
|
||||||
cli = new DaemonMavenCli();
|
cli = new DaemonMavenCli();
|
||||||
|
70
src/main/java/org/jboss/fuse/mvnd/daemon/ServerMain.java
Normal file
70
src/main/java/org/jboss/fuse/mvnd/daemon/ServerMain.java
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2019 the original author or authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.jboss.fuse.mvnd.daemon;
|
||||||
|
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.net.URLClassLoader;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
public class ServerMain {
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
String uidStr = System.getProperty("daemon.uid");
|
||||||
|
String mavenHomeStr = System.getProperty("maven.home");
|
||||||
|
if (uidStr == null || mavenHomeStr == null) {
|
||||||
|
throw new IllegalStateException("The system properties 'daemon.uid' and 'maven.home' must be valid");
|
||||||
|
}
|
||||||
|
|
||||||
|
Path mavenHome = Paths.get(mavenHomeStr);
|
||||||
|
URL[] classpath =
|
||||||
|
Stream.concat(
|
||||||
|
Stream.concat(Files.list(mavenHome.resolve("lib/ext")),
|
||||||
|
Files.list(mavenHome.resolve("lib")))
|
||||||
|
.filter(p -> p.getFileName().toString().endsWith(".jar"))
|
||||||
|
.filter(Files::isRegularFile),
|
||||||
|
Stream.of(mavenHome.resolve("conf"), mavenHome.resolve("conf/logging")))
|
||||||
|
.map(Path::normalize)
|
||||||
|
.map(Path::toUri)
|
||||||
|
.map(uri -> {
|
||||||
|
try {
|
||||||
|
return uri.toURL();
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.toArray(URL[]::new);
|
||||||
|
ClassLoader loader = new URLClassLoader(classpath, null) {
|
||||||
|
@Override
|
||||||
|
protected Class<?> findClass(String name) throws ClassNotFoundException {
|
||||||
|
try {
|
||||||
|
return super.findClass(name);
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
return ServerMain.class.getClassLoader().loadClass(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Thread.currentThread().setContextClassLoader(loader);
|
||||||
|
Class<?> clazz = loader.loadClass("org.jboss.fuse.mvnd.daemon.Server");
|
||||||
|
try (AutoCloseable server = (AutoCloseable) clazz.getConstructor(String.class).newInstance(uidStr)) {
|
||||||
|
((Runnable) server).run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user