Start using the new helper from more modules

This commit is contained in:
Sanne Grinovero 2024-05-03 10:28:59 +01:00
parent df750d8694
commit ce4471f489
35 changed files with 112 additions and 41 deletions

View File

@ -14,6 +14,10 @@
<name>Quarkus - Core - Deployment</name>
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-classloader-commons</artifactId>
</dependency>
<dependency>
<groupId>org.aesh</groupId>
<artifactId>readline</artifactId>

View File

@ -1,5 +1,7 @@
package io.quarkus.deployment;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.UncheckedIOException;
@ -381,7 +383,7 @@ public class CodeGenerator {
.map(String::trim)
// skip comments and empty lines
.filter(line -> !line.startsWith("#") && !line.isEmpty())
.filter(className -> classLoader.getResource(className.replace('.', '/') + ".class") == null)
.filter(className -> classLoader.getResource(fromClassNameToResourceName(className)) == null)
.forEach(unavailableList::add);
} catch (IOException e) {
throw new UncheckedIOException("Failed to read " + serviceFile, e);

View File

@ -1,5 +1,7 @@
package io.quarkus.deployment;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import java.io.StringWriter;
import java.io.Writer;
import java.util.List;
@ -77,7 +79,7 @@ public class GeneratedClassGizmoAdaptor implements ClassOutput {
.getContextClassLoader();
//if the class file is present in this (and not the parent) CL then it is an application class
List<ClassPathElement> res = cl
.getElementsWithResource(className.replace('.', '/') + ".class", true);
.getElementsWithResource(fromClassNameToResourceName(className), true);
return !res.isEmpty();
}

View File

@ -36,6 +36,7 @@ import io.quarkus.bootstrap.runner.Timing;
import io.quarkus.builder.BuildChainBuilder;
import io.quarkus.builder.BuildContext;
import io.quarkus.builder.BuildStep;
import io.quarkus.commons.classloading.ClassloadHelper;
import io.quarkus.deployment.builditem.ApplicationClassPredicateBuildItem;
import io.quarkus.deployment.console.ConsoleCommand;
import io.quarkus.deployment.console.ConsoleStateManager;
@ -408,9 +409,10 @@ public class IsolatedDevModeMain implements BiConsumer<CuratedApplication, Map<S
public boolean test(String s) {
QuarkusClassLoader cl = (QuarkusClassLoader) Thread.currentThread()
.getContextClassLoader();
String resourceName = ClassloadHelper.fromClassNameToResourceName(s);
//if the class file is present in this (and not the parent) CL then it is an application class
List<ClassPathElement> res = cl
.getElementsWithResource(s.replace('.', '/') + ".class", true);
.getElementsWithResource(resourceName, true);
return !res.isEmpty();
}
}));

View File

@ -1,5 +1,7 @@
package io.quarkus.deployment.dev.filesystem;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@ -296,7 +298,7 @@ public class ReloadableFileManager extends QuarkusFileManager {
// It would be easier to call the loadClass() methods of the delegateClassLoaders
// here, but we have to load the class from the bytecode ourselves, because we
// need it to be associated with our class loader.
String path = name.replace('.', '/') + ".class";
String path = fromClassNameToResourceName(name);
URL url = findResource(path);
if (url == null) {
throw new ClassNotFoundException(name);
@ -376,4 +378,4 @@ public class ReloadableFileManager extends QuarkusFileManager {
return (capacity == nread) ? buf : Arrays.copyOf(buf, nread);
}
}
}
}

View File

@ -1,5 +1,7 @@
package io.quarkus.deployment.dev.testing;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Modifier;
@ -654,13 +656,14 @@ public class JunitTestRunner {
Map<String, byte[]> transformedClasses = new HashMap<>();
for (String i : classesToTransform) {
try {
String resourceName = fromClassNameToResourceName(i);
byte[] classData = IoUtil
.readBytes(deploymentClassLoader.getResourceAsStream(i.replace('.', '/') + ".class"));
.readBytes(deploymentClassLoader.getResourceAsStream(resourceName));
ClassReader cr = new ClassReader(classData);
ClassWriter writer = new QuarkusClassWriter(cr,
ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS);
cr.accept(new TestTracingProcessor.TracingClassVisitor(writer, i), 0);
transformedClasses.put(i.replace('.', '/') + ".class", writer.toByteArray());
transformedClasses.put(resourceName, writer.toByteArray());
} catch (Exception e) {
log.error("Failed to instrument " + i + " for usage tracking", e);
}

View File

@ -1,5 +1,7 @@
package io.quarkus.deployment.index;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Modifier;
@ -313,7 +315,7 @@ public class IndexWrapper implements IndexView {
return false;
}
try (InputStream stream = classLoader
.getResourceAsStream(className.replace('.', '/') + ".class")) {
.getResourceAsStream(fromClassNameToResourceName(className))) {
if (stream != null) {
indexer.index(stream);
result = true;

View File

@ -1,5 +1,6 @@
package io.quarkus.deployment.pkg.steps;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import static io.quarkus.deployment.pkg.PackageConfig.JarConfig.JarType.*;
import java.io.BufferedInputStream;
@ -649,7 +650,7 @@ public class JarResultBuildStep {
fastJarJarsBuilder.setGenerated(generatedZip);
try (FileSystem out = createNewZip(generatedZip, packageConfig)) {
for (GeneratedClassBuildItem i : generatedClasses) {
String fileName = i.getName().replace('.', '/') + ".class";
String fileName = fromClassNameToResourceName(i.getName());
Path target = out.getPath(fileName);
if (target.getParent() != null) {
Files.createDirectories(target.getParent());
@ -1181,7 +1182,7 @@ public class JarResultBuildStep {
}
}
for (GeneratedClassBuildItem i : generatedClasses) {
String fileName = i.getName().replace('.', '/') + ".class";
String fileName = fromClassNameToResourceName(i.getName());
seen.put(fileName, "Current Application");
Path target = runnerZipFs.getPath(fileName);
handleParent(runnerZipFs, fileName, seen);

View File

@ -1,5 +1,7 @@
package io.quarkus.deployment.steps;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
@ -31,7 +33,7 @@ public class AdditionalClassLoaderResourcesBuildStep {
collected.put(entry.getKey(), entry.getValue());
// add it also as resources to allow index to work properly
collected.put(entry.getKey().replace('.', '/') + ".class", entry.getValue());
collected.put(fromClassNameToResourceName(entry.getKey()), entry.getValue());
}
}

View File

@ -1,5 +1,7 @@
package io.quarkus.deployment.steps;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.net.URL;
@ -113,7 +115,7 @@ public class BannerProcessor {
// We determine whether the banner is the default by checking to see if the jar that contains it also
// contains this class. This way although somewhat complicated guarantees that any rename of artifacts
// won't affect the check
Path resolved = p.resolve("/" + thisClassName.replace('.', '/') + ".class");
Path resolved = p.resolve("/" + fromClassNameToResourceName(thisClassName));
return Files.exists(resolved);
});
} catch (UncheckedIOException ex) {

View File

@ -1,5 +1,7 @@
package io.quarkus.deployment.steps;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@ -145,7 +147,7 @@ public class ClassTransformingBuildStep {
ClassLoader old = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(transformCl);
String classFileName = className.replace('.', '/') + ".class";
String classFileName = fromClassNameToResourceName(className);
List<ClassPathElement> archives = cl.getElementsWithResource(classFileName);
if (!archives.isEmpty()) {
ClassPathElement classPathElement = archives.get(0);
@ -195,7 +197,7 @@ public class ClassTransformingBuildStep {
}
}
}
String classFileName = className.replace('.', '/') + ".class";
String classFileName = fromClassNameToResourceName(className);
List<ClassPathElement> archives = cl.getElementsWithResource(classFileName);
if (!archives.isEmpty()) {
ClassPathElement classPathElement = archives.get(0);
@ -372,7 +374,7 @@ public class ClassTransformingBuildStep {
if (!debugPath.exists()) {
debugPath.mkdir();
}
File classFile = new File(debugPath, className.replace('.', '/') + ".class");
File classFile = new File(debugPath, fromClassNameToResourceName(className));
classFile.getParentFile().mkdirs();
try (FileOutputStream classWriter = new FileOutputStream(classFile)) {
classWriter.write(data);

View File

@ -1,11 +1,13 @@
package io.quarkus.deployment.util;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import java.io.IOException;
import java.io.InputStream;
public class IoUtil {
public static InputStream readClass(ClassLoader classLoader, String className) {
return classLoader.getResourceAsStream(className.replace('.', '/') + ".class");
return classLoader.getResourceAsStream(fromClassNameToResourceName(className));
}
public static byte[] readClassAsBytes(ClassLoader classLoader, String className) throws IOException {

View File

@ -1,5 +1,7 @@
package io.quarkus.runner.bootstrap;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import java.io.Closeable;
import java.io.File;
import java.io.FileOutputStream;
@ -362,7 +364,7 @@ public class StartupActionImpl implements StartupAction {
Map<String, byte[]> data = new HashMap<>();
for (GeneratedClassBuildItem i : buildResult.consumeMulti(GeneratedClassBuildItem.class)) {
if (i.isApplicationClass() == applicationClasses) {
data.put(i.getName().replace('.', '/') + ".class", i.getClassData());
data.put(fromClassNameToResourceName(i.getName()), i.getClassData());
if (BootstrapDebug.DEBUG_CLASSES_DIR != null) {
try {
File debugPath = new File(BootstrapDebug.DEBUG_CLASSES_DIR);

View File

@ -1,5 +1,6 @@
package io.quarkus.deployment.pkg.steps;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
@ -40,7 +41,7 @@ public class BannerProcessorTest {
}
try (final FileSystem fs = ZipUtils.newFileSystem(zipPath)) {
Path classFile = fs.getPath(MyBannerProcessor.class.getName().replace('.', '/') + ".class");
Path classFile = fs.getPath(fromClassNameToResourceName(MyBannerProcessor.class.getName()));
Files.createDirectories(classFile.getParent());
Files.write(classFile, "".getBytes(StandardCharsets.UTF_8));
}

View File

@ -16,6 +16,8 @@ import org.jboss.jandex.Type;
import org.jboss.jandex.Type.Kind;
import org.junit.jupiter.api.Test;
import io.quarkus.commons.classloading.ClassloadHelper;
public class JandexUtilTest {
private static final DotName SIMPLE = DotName.createSimple(Single.class.getName());
@ -307,7 +309,7 @@ public class JandexUtilTest {
for (Class<?> clazz : classes) {
try {
try (InputStream stream = JandexUtilTest.class.getClassLoader()
.getResourceAsStream(clazz.getName().replace('.', '/') + ".class")) {
.getResourceAsStream(ClassloadHelper.fromClassNameToResourceName(clazz.getName()))) {
indexer.index(stream);
}
} catch (IOException e) {

View File

@ -1,5 +1,7 @@
package io.quarkus.hibernate.orm.runtime.boot.scan;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
@ -149,8 +151,9 @@ public class QuarkusScanner implements Scanner {
@Override
public InputStreamAccess getStreamAccess() {
final String resourceName = fromClassNameToResourceName(name);
return new UrlInputStreamAccess(
Thread.currentThread().getContextClassLoader().getResource(name.replace('.', '/') + ".class"));
Thread.currentThread().getContextClassLoader().getResource(resourceName));
}
}
}

View File

@ -19,6 +19,7 @@ import org.jboss.jandex.Indexer;
import org.jboss.jandex.ParameterizedType;
import org.junit.jupiter.api.Test;
import io.quarkus.commons.classloading.ClassloadHelper;
import io.quarkus.qute.Engine;
import io.quarkus.qute.Expression;
import io.quarkus.qute.deployment.TypeInfos.Info;
@ -94,8 +95,9 @@ public class TypeInfosTest {
private static Index index(Class<?>... classes) throws IOException {
Indexer indexer = new Indexer();
for (Class<?> clazz : classes) {
final String resourceName = ClassloadHelper.fromClassNameToResourceName(clazz.getName());
try (InputStream stream = TypeInfosTest.class.getClassLoader()
.getResourceAsStream(clazz.getName().replace('.', '/') + ".class")) {
.getResourceAsStream(resourceName)) {
indexer.index(stream);
}
}

View File

@ -19,6 +19,7 @@ import org.jboss.jandex.PrimitiveType.Primitive;
import org.jboss.jandex.Type;
import org.junit.jupiter.api.Test;
import io.quarkus.commons.classloading.ClassloadHelper;
import io.quarkus.qute.EvalContext;
import io.quarkus.qute.ValueResolver;
import io.quarkus.qute.deployment.Types.AssignabilityCheck;
@ -78,8 +79,9 @@ public class TypesTest {
private static Index index(Class<?>... classes) throws IOException {
Indexer indexer = new Indexer();
for (Class<?> clazz : classes) {
final String resourceName = ClassloadHelper.fromClassNameToResourceName(clazz.getName());
try (InputStream stream = TypesTest.class.getClassLoader()
.getResourceAsStream(clazz.getName().replace('.', '/') + ".class")) {
.getResourceAsStream(resourceName)) {
indexer.index(stream);
}
}

View File

@ -1,5 +1,7 @@
package io.quarkus.resteasy.reactive.server.deployment;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
@ -24,7 +26,8 @@ public class FilterClassIntrospector {
public boolean usesGetResourceMethod(MethodInfo methodInfo) {
String className = methodInfo.declaringClass().name().toString();
try (InputStream is = classLoader.getResourceAsStream(className.replace('.', '/') + ".class")) {
final String resourceName = fromClassNameToResourceName(className);
try (InputStream is = classLoader.getResourceAsStream(resourceName)) {
ClassReader configClassReader = new ClassReader(is);
FilterClassVisitor classVisitor = new FilterClassVisitor(methodInfo.descriptor());
configClassReader.accept(classVisitor, 0);

View File

@ -1,5 +1,7 @@
package io.quarkus.resteasy.reactive.server.deployment;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import java.io.IOException;
import java.io.InputStream;
import java.util.Optional;
@ -24,7 +26,8 @@ final class MessageBodyWriterTransformerUtils {
}
public static boolean shouldAddAllWriteableMarker(String messageBodyWriterClassName, ClassLoader classLoader) {
try (InputStream is = classLoader.getResourceAsStream(messageBodyWriterClassName.replace('.', '/') + ".class")) {
final String resourceName = fromClassNameToResourceName(messageBodyWriterClassName);
try (InputStream is = classLoader.getResourceAsStream(resourceName)) {
if (is != null) {
AtomicBoolean result = new AtomicBoolean(false);
ClassReader configClassReader = new ClassReader(is);

View File

@ -1,5 +1,7 @@
package io.quarkus.resteasy.reactive.server.test.simple;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
@ -78,7 +80,7 @@ public class IllegalClassExceptionMapper implements ExceptionMapper<Incompatible
private void dumpClass(String classname, String method) {
InputStream bytes = Thread.currentThread().getContextClassLoader()
.getResourceAsStream(classname.replace('.', '/') + ".class");
.getResourceAsStream(fromClassNameToResourceName(classname));
try {
ClassReader cr = new ClassReader(bytes);
PrintWriter writer = new PrintWriter(System.err);

View File

@ -1,5 +1,7 @@
package io.quarkus.security.test.rolesallowed;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
@ -24,8 +26,9 @@ public class ConfigExpressionDetectionTest {
// point here is to verify expected values gathered from @RolesAllowed annotation are detected correctly
var indexer = new Indexer();
for (Class<?> aClass : new Class<?>[] { ConfigExpressionDetectionTest.class, ValidValues.class }) {
final String resourceName = fromClassNameToResourceName(aClass.getName());
try (InputStream stream = ConfigExpressionDetectionTest.class.getClassLoader()
.getResourceAsStream(aClass.getName().replace('.', '/') + ".class")) {
.getResourceAsStream(resourceName)) {
assert stream != null;
indexer.index(stream);
} catch (IOException e) {

View File

@ -41,6 +41,7 @@ import org.reactivestreams.Processor;
import org.reactivestreams.Publisher;
import org.reactivestreams.Subscriber;
import io.quarkus.commons.classloading.ClassloadHelper;
import io.quarkus.deployment.builditem.GeneratedClassBuildItem;
import io.quarkus.deployment.builditem.RunTimeConfigurationDefaultBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
@ -146,9 +147,10 @@ public class DefaultSerdeConfigTest {
private static IndexView index(List<Class<?>> classes) {
Indexer indexer = new Indexer();
for (Class<?> clazz : classes) {
final String resourceName = ClassloadHelper.fromClassNameToResourceName(clazz.getName());
try {
try (InputStream stream = DefaultSerdeConfigTest.class.getClassLoader()
.getResourceAsStream(clazz.getName().replace('.', '/') + ".class")) {
.getResourceAsStream(resourceName)) {
indexer.index(stream);
}
} catch (IOException e) {

View File

@ -1,5 +1,6 @@
package io.quarkus.smallrye.reactivemessaging.kafka.deployment;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.groups.Tuple.tuple;
@ -332,9 +333,10 @@ class ReflectiveClassForValueSerializerPayloadTest {
private static IndexView index(Class<?>... classes) {
Indexer indexer = new Indexer();
for (Class<?> clazz : classes) {
final String resourceName = fromClassNameToResourceName(clazz.getName());
try {
try (InputStream stream = DefaultSerdeConfigTest.class.getClassLoader()
.getResourceAsStream(clazz.getName().replace('.', '/') + ".class")) {
.getResourceAsStream(resourceName)) {
indexer.index(stream);
}
} catch (IOException e) {

View File

@ -41,6 +41,7 @@ import org.reactivestreams.Publisher;
import org.reactivestreams.Subscriber;
import io.quarkus.arc.deployment.SyntheticBeanBuildItem;
import io.quarkus.commons.classloading.ClassloadHelper;
import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.builditem.RunTimeConfigurationDefaultBuildItem;
import io.quarkus.deployment.recording.RecorderContext;
@ -136,9 +137,10 @@ public class DefaultSchemaConfigTest {
private static IndexView index(List<Class<?>> classes) {
Indexer indexer = new Indexer();
for (Class<?> clazz : classes) {
final String resourceName = ClassloadHelper.fromClassNameToResourceName(clazz.getName());
try {
try (InputStream stream = DefaultSchemaConfigTest.class.getClassLoader()
.getResourceAsStream(clazz.getName().replace('.', '/') + ".class")) {
.getResourceAsStream(resourceName)) {
indexer.index(stream);
}
} catch (IOException e) {

View File

@ -1,5 +1,7 @@
package io.quarkus.spring.boot.properties.deployment;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
@ -26,7 +28,8 @@ public class ConfigPropertyBuildItemCandidateUtil {
*/
public static void removePropertiesWithDefaultValue(ClassLoader classLoader, String configClass,
List<ConfigPropertyBuildItemCandidate> candidates) {
try (InputStream is = classLoader.getResourceAsStream(configClass.replace('.', '/') + ".class")) {
final String resourceName = fromClassNameToResourceName(configClass);
try (InputStream is = classLoader.getResourceAsStream(resourceName)) {
ClassReader configClassReader = new ClassReader(is);
configClassReader.accept(new ConfigClassVisitor(candidates, configClass), 0);
} catch (IOException e) {

View File

@ -1,5 +1,6 @@
package io.quarkus.spring.data.deployment;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
@ -115,7 +116,7 @@ public class MethodNameParserTest {
Indexer indexer = new Indexer();
for (Class<?> clazz : classes) {
try (InputStream stream = MethodNameParserTest.class.getClassLoader()
.getResourceAsStream(clazz.getName().replace('.', '/') + ".class")) {
.getResourceAsStream(fromClassNameToResourceName(clazz.getName()))) {
indexer.index(stream);
}
}

View File

@ -38,7 +38,7 @@ class ExtensionInvoker {
extensionClasses.put(extensionClass.getName(), extensionClass);
extensionClassInstances.put(extensionClass, extension);
try (InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream(
extensionClass.getName().replace('.', '/') + ".class")) {
extensionClass.getName().replace('.', '/').concat(".class"))) {
extensionsIndexer.index(stream);
} catch (IOException e) {
throw new UncheckedIOException(e);

View File

@ -1,6 +1,8 @@
package io.quarkus.commons.benchmarks;
import io.quarkus.commons.classloading.ClassloadHelper;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Fork;
@ -12,8 +14,7 @@ import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.annotations.Warmup;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import io.quarkus.commons.classloading.ClassloadHelper;
/**
* We benchmark this strategy with CompilerControl.Mode.EXCLUDE as this code

View File

@ -33,6 +33,10 @@
</dependencyManagement>
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-classloader-commons</artifactId>
</dependency>
<dependency>
<groupId>io.smallrye.beanbag</groupId>
<artifactId>smallrye-beanbag-maven</artifactId>

View File

@ -22,6 +22,7 @@ import org.apache.maven.shared.utils.cli.CommandLineException;
import org.apache.maven.shared.utils.cli.CommandLineUtils;
import io.quarkus.bootstrap.util.PropertyUtils;
import io.quarkus.commons.classloading.ClassloadHelper;
/**
* This class resolves relevant Maven command line options in case it's called
@ -256,7 +257,7 @@ public class BootstrapMavenOptions {
* classpath of the context classloader
*/
public static Path getClassOrigin(Class<?> cls) throws IOException {
return getResourceOrigin(cls.getClassLoader(), cls.getName().replace('.', '/') + ".class");
return getResourceOrigin(cls.getClassLoader(), ClassloadHelper.fromClassNameToResourceName(cls.getName()));
}
public static Path getResourceOrigin(ClassLoader cl, final String name) throws IOException {

View File

@ -28,6 +28,7 @@ import org.eclipse.aether.RepositorySystemSession;
import io.fabric8.maven.Maven;
import io.fabric8.maven.XMLFormat;
import io.quarkus.commons.classloading.ClassloadHelper;
/**
* @author kameshs
@ -319,7 +320,7 @@ public class MojoUtils {
* classpath of the context classloader
*/
public static Path getClassOrigin(Class<?> cls) throws IOException {
return getResourceOrigin(cls.getClassLoader(), cls.getName().replace('.', '/') + ".class");
return getResourceOrigin(cls.getClassLoader(), ClassloadHelper.fromClassNameToResourceName(cls.getName()));
}
public static Path getResourceOrigin(ClassLoader cl, final String name) throws IOException {

View File

@ -1,5 +1,7 @@
package io.quarkus.test.common;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URI;
@ -133,7 +135,7 @@ public final class PathTestHelper {
*/
public static Path getTestClassesLocation(Class<?> testClass) {
String classFileName = testClass.getName().replace('.', File.separatorChar) + ".class";
URL resource = testClass.getClassLoader().getResource(testClass.getName().replace('.', '/') + ".class");
URL resource = testClass.getClassLoader().getResource(fromClassNameToResourceName(testClass.getName()));
if (resource.getProtocol().equals("jar")) {
try {
@ -254,7 +256,7 @@ public final class PathTestHelper {
}
public static boolean isTestClass(String className, ClassLoader classLoader, Path testLocation) {
URL resource = classLoader.getResource(className.replace('.', '/') + ".class");
URL resource = classLoader.getResource(fromClassNameToResourceName(className));
if (resource == null) {
return false;
}

View File

@ -1,5 +1,7 @@
package io.quarkus.test.component;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@ -1196,7 +1198,7 @@ public class QuarkusComponentTestExtension
testOutputDirectory = new File(outputDirectory);
} else {
// org.acme.Foo -> org/acme/Foo.class
String testClassResourceName = testClass.getName().replace('.', '/') + ".class";
String testClassResourceName = fromClassNameToResourceName(testClass.getName());
// org/acme/Foo.class -> /some/path/to/project/target/test-classes/org/acme/Foo.class
String testPath = testClass.getClassLoader().getResource(testClassResourceName).getFile();
// /some/path/to/project/target/test-classes/org/acme/Foo.class -> /some/path/to/project/target/test-classes

View File

@ -1,5 +1,6 @@
package io.quarkus.test.junit;
import static io.quarkus.commons.classloading.ClassloadHelper.fromClassNameToResourceName;
import static io.quarkus.test.common.PathTestHelper.getAppClassLocationForTestLocation;
import static io.quarkus.test.common.PathTestHelper.getTestClassesLocation;
@ -77,7 +78,7 @@ public class AbstractJvmQuarkusTestExtension extends AbstractQuarkusTestWithCont
// If gradle project running directly with IDE
if (gradleAppModel != null && gradleAppModel.getApplicationModule() != null) {
final WorkspaceModule module = gradleAppModel.getApplicationModule();
final String testClassFileName = requiredTestClass.getName().replace('.', '/') + ".class";
final String testClassFileName = fromClassNameToResourceName(requiredTestClass.getName());
Path testClassesDir = null;
for (String classifier : module.getSourceClassifiers()) {
final ArtifactSources sources = module.getSources(classifier);