use of org.gradle.internal.classpath.ClassPath in project gradle by gradle.
the class BuildSourceBuilder method buildAndCreateClassLoader.
public ClassLoaderScope buildAndCreateClassLoader(StartParameter startParameter) {
ClassPath classpath = createBuildSourceClasspath(startParameter);
ClassLoaderScope childScope = classLoaderScope.createChild(startParameter.getCurrentDir().getAbsolutePath());
childScope.export(cachedClasspathTransformer.transform(classpath));
childScope.lock();
return childScope;
}
use of org.gradle.internal.classpath.ClassPath in project gradle by gradle.
the class DefaultDaemonStarter method startDaemon.
public DaemonStartupInfo startDaemon() {
String daemonUid = UUID.randomUUID().toString();
GradleInstallation gradleInstallation = CurrentGradleInstallation.get();
ModuleRegistry registry = new DefaultModuleRegistry(gradleInstallation);
ClassPath classpath;
List<File> searchClassPath;
if (gradleInstallation == null) {
// When not running from a Gradle distro, need runtime impl for launcher plus the search path to look for other modules
classpath = new DefaultClassPath();
for (Module module : registry.getModule("gradle-launcher").getAllRequiredModules()) {
classpath = classpath.plus(module.getClasspath());
}
searchClassPath = registry.getAdditionalClassPath().getAsFiles();
} else {
// When running from a Gradle distro, only need launcher jar. The daemon can find everything from there.
classpath = registry.getModule("gradle-launcher").getImplementationClasspath();
searchClassPath = Collections.emptyList();
}
if (classpath.isEmpty()) {
throw new IllegalStateException("Unable to construct a bootstrap classpath when starting the daemon");
}
versionValidator.validate(daemonParameters);
List<String> daemonArgs = new ArrayList<String>();
daemonArgs.add(daemonParameters.getEffectiveJvm().getJavaExecutable().getAbsolutePath());
List<String> daemonOpts = daemonParameters.getEffectiveJvmArgs();
daemonArgs.addAll(daemonOpts);
daemonArgs.add("-cp");
daemonArgs.add(CollectionUtils.join(File.pathSeparator, classpath.getAsFiles()));
if (Boolean.getBoolean("org.gradle.daemon.debug")) {
daemonArgs.add("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005");
}
LOGGER.debug("Using daemon args: {}", daemonArgs);
daemonArgs.add(GradleDaemon.class.getName());
// Version isn't used, except by a human looking at the output of jps.
daemonArgs.add(GradleVersion.current().getVersion());
// Serialize configuration to daemon via the process' stdin
StreamByteBuffer buffer = new StreamByteBuffer();
FlushableEncoder encoder = new KryoBackedEncoder(new EncodedStream.EncodedOutput(buffer.getOutputStream()));
try {
encoder.writeString(daemonParameters.getGradleUserHomeDir().getAbsolutePath());
encoder.writeString(daemonDir.getBaseDir().getAbsolutePath());
encoder.writeSmallInt(daemonParameters.getIdleTimeout());
encoder.writeSmallInt(daemonParameters.getPeriodicCheckInterval());
encoder.writeString(daemonUid);
encoder.writeSmallInt(daemonOpts.size());
for (String daemonOpt : daemonOpts) {
encoder.writeString(daemonOpt);
}
encoder.writeSmallInt(searchClassPath.size());
for (File file : searchClassPath) {
encoder.writeString(file.getAbsolutePath());
}
encoder.flush();
} catch (IOException e) {
throw new UncheckedIOException(e);
}
InputStream stdInput = buffer.getInputStream();
return startProcess(daemonArgs, daemonDir.getVersionedDir(), stdInput);
}
use of org.gradle.internal.classpath.ClassPath in project gradle by gradle.
the class DefaultToolingImplementationLoader method createImplementationClassLoader.
private ClassLoader createImplementationClassLoader(Distribution distribution, ProgressLoggerFactory progressLoggerFactory, InternalBuildProgressListener progressListener, File userHomeDir, BuildCancellationToken cancellationToken) {
ClassPath implementationClasspath = distribution.getToolingImplementationClasspath(progressLoggerFactory, progressListener, userHomeDir, cancellationToken);
LOGGER.debug("Using tooling provider classpath: {}", implementationClasspath);
FilteringClassLoader.Spec filterSpec = new FilteringClassLoader.Spec();
filterSpec.allowPackage("org.gradle.tooling.internal.protocol");
FilteringClassLoader filteringClassLoader = new FilteringClassLoader(classLoader, filterSpec);
return new VisitableURLClassLoader(filteringClassLoader, implementationClasspath);
}
use of org.gradle.internal.classpath.ClassPath in project gradle by gradle.
the class DynamicModulesClassPathProvider method findClassPath.
public ClassPath findClassPath(String name) {
if (name.equals("GRADLE_EXTENSIONS")) {
Set<Module> coreModules = allRequiredModulesOf("gradle-core");
ClassPath classpath = ClassPath.EMPTY;
for (String moduleName : GRADLE_EXTENSION_MODULES) {
Set<Module> extensionModules = allRequiredModulesOf(moduleName);
classpath = plusExtensionModules(classpath, extensionModules, coreModules);
}
for (String moduleName : GRADLE_OPTIONAL_EXTENSION_MODULES) {
Set<Module> optionalExtensionModules = allRequiredModulesOfOptional(moduleName);
classpath = plusExtensionModules(classpath, optionalExtensionModules, coreModules);
}
for (Module pluginModule : pluginModuleRegistry.getApiModules()) {
classpath = classpath.plus(pluginModule.getClasspath());
}
for (Module pluginModule : pluginModuleRegistry.getImplementationModules()) {
classpath = classpath.plus(pluginModule.getClasspath());
}
return classpath;
}
return null;
}
use of org.gradle.internal.classpath.ClassPath in project gradle by gradle.
the class DefaultVersionedPlayRunAdapter method getBuildLink.
@Override
public Object getBuildLink(final ClassLoader classLoader, final Reloader reloader, final File projectPath, final File applicationJar, final Iterable<File> changingClasspath, final File assetsJar, final Iterable<File> assetsDirs) throws ClassNotFoundException {
final ClassLoader assetsClassLoader = createAssetsClassLoader(assetsJar, assetsDirs, classLoader);
final Class<? extends Throwable> playExceptionClass = Cast.uncheckedCast(classLoader.loadClass(PLAY_EXCEPTION_CLASSNAME));
return Proxy.newProxyInstance(classLoader, new Class<?>[] { getBuildLinkClass(classLoader) }, new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (method.getName().equals("projectPath")) {
return projectPath;
} else if (method.getName().equals("reload")) {
Reloader.Result result = reloader.requireUpToDate();
// We can't close replaced loaders immediately, because their classes may be used during shutdown,
// after the return of the reload() call that caused the loader to be swapped out.
// We have no way of knowing when the loader is actually done with, so we use the request after the request
// that triggered the reload as the trigger point to close the replaced loader.
closeOldLoaders();
if (result.changed) {
ClassPath classpath = new DefaultClassPath(applicationJar).plus(new DefaultClassPath(changingClasspath));
URLClassLoader currentClassLoader = new URLClassLoader(classpath.getAsURLArray(), assetsClassLoader);
storeClassLoader(currentClassLoader);
return currentClassLoader;
} else {
Throwable failure = result.failure;
if (failure == null) {
return null;
} else {
try {
return DirectInstantiator.instantiate(playExceptionClass, "Gradle Build Failure", failure.getMessage(), failure);
} catch (Exception e) {
LOGGER.warn("Could not translate " + failure + " to " + PLAY_EXCEPTION_CLASSNAME, e);
return failure;
}
}
}
} else if (method.getName().equals("settings")) {
return new HashMap<String, String>();
}
// TODO: all methods
return null;
}
});
}
Aggregations