On 6/4/11 1:53 PM, Peter Niederwieser wrote:
I think you are on the right track, but without seeing the full (modified)
source code and stack trace, I can't tell where the problem is. Sounds like
someone is trying to modify the 'compile' configuration in a way that's not
allowed. Modifying source sets from a plugin is certainly possible.
I'm most likely doing it wrong then. I'm attaching the modified source
code and the full stack trace; I hope that's appropriate for this
newsgroup. You'll need the original m2metadata plugin from
https://github.com/jbaruch/Gradle-M2Metadata-Plugin to copy the files on
top of. Thanks again for your help!
-Dave
package org.gradle.plugin.maven;
import static com.google.common.collect.ImmutableMap.of;
import static com.google.common.collect.Iterables.any;
import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Iterables.find;
import static com.google.common.collect.Iterables.transform;
import static com.google.common.collect.Multimaps.index;
import static org.gradle.api.artifacts.Dependency.ARCHIVES_CONFIGURATION;
import static org.gradle.plugin.maven.ObjectConverter.scope2Configuration;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.execution.DefaultMavenExecutionRequest;
import org.apache.maven.execution.DefaultMavenExecutionResult;
import org.apache.maven.execution.MavenExecutionRequest;
import org.apache.maven.execution.MavenExecutionRequestPopulationException;
import org.apache.maven.execution.MavenExecutionRequestPopulator;
import org.apache.maven.execution.MavenExecutionResult;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.Exclusion;
import org.apache.maven.model.Repository;
import org.apache.maven.model.building.ModelBuildingRequest;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuilder;
import org.apache.maven.project.ProjectBuildingException;
import org.apache.maven.project.ProjectBuildingRequest;
import org.apache.maven.project.ProjectBuildingResult;
import org.apache.maven.project.artifact.ProjectArtifact;
import org.apache.maven.settings.Settings;
import org.apache.maven.settings.building.DefaultSettingsBuildingRequest;
import org.apache.maven.settings.building.SettingsBuilder;
import org.apache.maven.settings.building.SettingsBuildingException;
import org.apache.maven.settings.building.SettingsBuildingRequest;
import org.codehaus.plexus.ContainerConfiguration;
import org.codehaus.plexus.DefaultContainerConfiguration;
import org.codehaus.plexus.DefaultPlexusContainer;
import org.codehaus.plexus.PlexusContainerException;
import org.codehaus.plexus.classworlds.ClassWorld;
import
org.codehaus.plexus.component.repository.exception.ComponentLookupException;
import org.codehaus.plexus.util.cli.CommandLineUtils;
import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.gradle.api.GradleException;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.Task;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.ConfigurationContainer;
import org.gradle.api.artifacts.dsl.RepositoryHandler;
import org.gradle.api.file.FileCollection;
import org.gradle.api.internal.artifacts.dependencies.AbstractDependency;
import
org.gradle.api.internal.artifacts.dependencies.DefaultExternalModuleDependency;
import org.gradle.api.internal.artifacts.dependencies.DefaultProjectDependency;
import
org.gradle.api.internal.artifacts.dependencies.DefaultSelfResolvingDependency;
import org.gradle.api.internal.artifacts.publish.ArchivePublishArtifact;
import org.gradle.api.internal.project.AbstractProject;
import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.plugins.JavaPluginConvention;
import org.gradle.api.tasks.SourceSet;
import org.gradle.api.tasks.bundling.Jar;
import org.gradle.api.tasks.testing.Test;
import org.sonatype.aether.RepositorySystemSession;
import org.sonatype.aether.util.DefaultRepositorySystemSession;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.common.collect.Multimap;
public class GradleM2MetadataPlugin implements Plugin<Project> {
private static final String MAVEN_COMPILER_PLUGIN_KEY =
"org.apache.maven.plugins:maven-compiler-plugin";
private static final String MAVEN_SOURCE_PLUGIN_KEY =
"org.apache.maven.plugins:maven-source-plugin";
private static final String SOURCES_CLASSIFIER = "sources";
private static final String SOURCES_JAR_TASK_NAME = "sourcesJar";
private static final String SOURCE_LEVEL_COMPILE_PLUGIN_SETTING = "source";
private static final String TARGET_LEVEL_COMPILE_PLUGIN_SETTING = "target";
private static final String JAVA_PLUGIN_CONVENTION_NAME = "java";
private static final String DEPENDENCIES_KEY = "lateBindDeps";
private static final String TESTNG_GROUP = "org.testng";
private static final String TESTNG_NAME = "testng";
private static final String TEST_RUNTIME_CONFIGURATION = "testRuntime";
private static final String TEST_COMPILE_CONFIGURATION = "testCompile";
private static final String PROVIDED_COMPILE_CONFIGURATION = "provided";
private File defaultUserSettingsFile;
private File defaultGlobalSettingsFile;
private MavenProject mavenProject;
private Project project;
private Settings mavenSettings;
private DefaultPlexusContainer container;
private Iterable<MavenProject> reactorProjects;
public void apply(Project project) {
this.project = project;
defaultUserSettingsFile = new File(new
File(System.getProperty("user.home"), ".m2"), "settings.xml");
defaultGlobalSettingsFile = new File(System.getProperty("maven.home",
System.getProperty("user.dir", "")), "conf/settings.xml");
// create a provided configuration if needed
org.gradle.api.artifacts.Configuration configuration =
project.getConfigurations().findByName(PROVIDED_COMPILE_CONFIGURATION);
if (configuration == null) {
configuration =
project.getConfigurations().add(PROVIDED_COMPILE_CONFIGURATION)
.setVisible(false)
.setDescription("Additional compile classpath for libraries
that should not be part of the archive.");
JavaPluginConvention convention = (JavaPluginConvention)
project.getConvention().getPlugins().get(JAVA_PLUGIN_CONVENTION_NAME);
convention.getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME).getCompileClasspath().add(configuration);
SourceSet testSourceSet =
convention.getSourceSets().getByName("test");
testSourceSet.getCompileClasspath().add(configuration);
testSourceSet.getRuntimeClasspath().add(configuration);
}
try {
project.getLogger().lifecycle("Reading maven project for {}...",
project.getName());
buildContainer();
readSettings();
readMavenProject();
project.getLogger().info("Configuring general settings...");
configureSettings();
project.getLogger().info("Applying Gradle plugins according to
packaging type...");
applyGradlePlugins();
project.getLogger().info("Retrieving metadata from known Maven
plugins...");
retrieveMavenPluginsMetadata();
project.getLogger().info("Applying Maven repositories...");
addRepositories();
project.getLogger().info("Adding project dependencies...");
addDependencies();
project.getLogger().info("Configuring correct test runner...");
configureTests();
} catch (Exception e) {
throw new GradleException("failed to read Maven project", e);
}
}
private void configureTests() {
ConfigurationContainer configurations = project.getConfigurations();
Configuration testRuntime =
configurations.findByName(TEST_RUNTIME_CONFIGURATION);
Configuration testCompile =
configurations.findByName(TEST_COMPILE_CONFIGURATION);
Set<org.gradle.api.artifacts.Dependency> testDependencies = new
HashSet<org.gradle.api.artifacts.Dependency>();
if (testCompile != null) {
testDependencies.addAll(testCompile.getDependencies());
}
if (testRuntime != null) {
testDependencies.addAll(testRuntime.getDependencies());
}
if (any(testDependencies, new
Predicate<org.gradle.api.artifacts.Dependency>() {
public boolean apply(org.gradle.api.artifacts.Dependency input) {
return input instanceof DefaultExternalModuleDependency &&
input.getGroup().equals(TESTNG_GROUP) && input.getName().equals(TESTNG_NAME);
}
})) {
Set<Task> tests = project.getTasksByName("test", false);
for (Task test : tests) {
((Test) test).useTestNG();
}
}
}
private void retrieveMavenPluginsMetadata() {
JavaPluginConvention javaConvention = (JavaPluginConvention)
project.getConvention().getPlugins().get(JAVA_PLUGIN_CONVENTION_NAME);
if (javaConvention != null) {
configureCompiler(javaConvention);
configureSources(javaConvention);
}
//TODO add artifactId and repo to maven-plugin's uploadArchives
}
private void configureSources(JavaPluginConvention javaConvention) {
org.apache.maven.model.Plugin mavenSourcePlugin =
mavenProject.getPlugin(MAVEN_SOURCE_PLUGIN_KEY);
if (mavenSourcePlugin != null) {
Jar sourcesJar = project.getTasks().add(SOURCES_JAR_TASK_NAME,
Jar.class);
sourcesJar.setDescription("Generates a jar archive with all the
source classes.");
sourcesJar.dependsOn(project.getTasksByName(JavaPlugin.COMPILE_JAVA_TASK_NAME,
false));
sourcesJar.setClassifier(SOURCES_CLASSIFIER);
sourcesJar.from(javaConvention.getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME).getAllSource());
project.getConfigurations().getByName(ARCHIVES_CONFIGURATION).addArtifact(new
ArchivePublishArtifact(sourcesJar));
}
}
private void configureCompiler(JavaPluginConvention javaConvention) {
org.apache.maven.model.Plugin mavenCompilerPlugin =
mavenProject.getPlugin(MAVEN_COMPILER_PLUGIN_KEY);
if (mavenCompilerPlugin != null) {
Xpp3Dom configuration = (Xpp3Dom)
mavenCompilerPlugin.getConfiguration();
if (configuration != null) { // where is my null safe elvis :(
Xpp3Dom source =
configuration.getChild(SOURCE_LEVEL_COMPILE_PLUGIN_SETTING);
if (source != null) {
javaConvention.setSourceCompatibility(source.getValue());
}
Xpp3Dom target =
configuration.getChild(TARGET_LEVEL_COMPILE_PLUGIN_SETTING);
if (target != null) {
javaConvention.setTargetCompatibility(target.getValue());
}
}
}
}
private void configureSettings() {
AbstractProject abstractProject = (AbstractProject) project;
abstractProject.setVersion(mavenProject.getVersion());
abstractProject.setGroup(mavenProject.getGroupId());
Artifact projectArtifact = new ProjectArtifact(mavenProject);
abstractProject.setStatus(projectArtifact.isSnapshot() ?
Artifact.SNAPSHOT_VERSION : Project.DEFAULT_STATUS);
}
private void readSettings() throws IOException, ComponentLookupException,
SettingsBuildingException {
Properties props = new Properties();
props.putAll(System.getProperties());
Properties envVars = CommandLineUtils.getSystemEnvVars();
for (Map.Entry<Object, Object> objectObjectEntry : envVars.entrySet()) {
props.setProperty("env." + objectObjectEntry.getKey().toString(),
objectObjectEntry.getValue().toString());
}
SettingsBuildingRequest request = new DefaultSettingsBuildingRequest();
request.setGlobalSettingsFile(defaultGlobalSettingsFile);
request.setUserSettingsFile(defaultUserSettingsFile);
request.setSystemProperties(props);
this.mavenSettings =
container.lookup(SettingsBuilder.class).build(request).getEffectiveSettings();
}
private void addRepositories() {
List<Repository> mavenRepositories = mavenProject.getRepositories();
RepositoryHandler repositoryHandler = project.getRepositories();
for (Repository mavenRepository : mavenRepositories) {
repositoryHandler.mavenRepo(of("name", mavenRepository.getId(),
"urls", mavenRepository.getUrl()));
}
}
private void applyGradlePlugins() {
//TODO project.apply(of("plugin", "maven")); - can't do it because
Maven2 dependencies in gradle class loader
String pluginName =
ObjectConverter.packaging2Plugin(mavenProject.getPackaging());
if (pluginName != null) {
project.apply(of("plugin", pluginName));
}
//only now we can add dependencies on this project classes
addReverseDependenciesOnClasses();
}
@SuppressWarnings({"unchecked"})
private void addReverseDependenciesOnClasses() {
JavaPluginConvention convention = (JavaPluginConvention)
project.getConvention().getPlugins().get(JAVA_PLUGIN_CONVENTION_NAME);
if (convention != null) {
List<DepDef> moduleDeps = (List<DepDef>)
project.getProperties().get(DEPENDENCIES_KEY);
if (moduleDeps != null) {
for (DepDef moduleDep : moduleDeps) {
Configuration configuration =
moduleDep.project.getConfigurations().getByName(moduleDep.configuration);
FileCollection testClasses =
convention.getSourceSets().getByName("test").getOutput();
configuration.addDependency(new
DefaultSelfResolvingDependency(testClasses));
}
}
}
}
@SuppressWarnings({"unchecked"})
private void addDependencies() {
List<Dependency> dependencies = mavenProject.getDependencies();
Multimap<String, Dependency> dependenciesByScope = index(dependencies,
new Function<Dependency, String>() {
public String apply(Dependency from) {
return from.getScope();
}
});
ConfigurationContainer configurations = project.getConfigurations();
for (String scope : dependenciesByScope.keySet()) {
String packaging = mavenProject.getPackaging();
String configurationName = scope2Configuration(scope, packaging);
if (configurationName == null) {
project.getLogger().warn("Can't find configuration matching
scope {} for packaging {}", scope, packaging);
} else {
org.gradle.api.artifacts.Configuration configuration =
configurations.getByName(configurationName);
Collection<Dependency> scopeDependencies =
dependenciesByScope.get(scope);
for (final Dependency mavenDependency : scopeDependencies) {
AbstractDependency dependency;
Iterable<MavenProject> projectModules =
filter(reactorProjects, new Predicate<MavenProject>() {//find maven module for
dependency
public boolean apply(MavenProject input) {
return
(input.getGroupId().equals(mavenDependency.getGroupId()) &&
input.getArtifactId().equals(mavenDependency.getArtifactId()) &&
input.getVersion().equals(mavenDependency.getVersion()));
}
});
if (Iterables.isEmpty(projectModules)) {//no module found,
add external dependency
dependency = new
DefaultExternalModuleDependency(mavenDependency.getGroupId(),
mavenDependency.getArtifactId(), mavenDependency.getVersion());
List<Exclusion> exclusions =
mavenDependency.getExclusions();
for (Exclusion exclusion : exclusions) {
((DefaultExternalModuleDependency)
dependency).exclude(of("group", exclusion.getGroupId(), "module",
exclusion.getArtifactId()));
}
} else { //Project Dependency found
final File mavenModule =
Iterables.getOnlyElement(projectModules).getBasedir();
// this is a concrete gradle project, it probably has
parent in which the plugin is applied in subprojects closure
Set<Project> allProjects = new HashSet<Project>();
collectAllProjects(project, allProjects);
Project projectDependency = find(allProjects, new
Predicate<Project>() {
public boolean apply(Project input)
{//input:project ':policy-client/1.0'
return
mavenModule.equals(input.getBuildDir().getParentFile());//project dir
}
});
if (configurationName.equals("testCompile") ||
configurationName.equals(TEST_RUNTIME_CONFIGURATION)) { // tests aren't
packaged, so we need to depend on compiled classes
Object javaPlugin =
projectDependency.getConvention().getPlugins().get(JAVA_PLUGIN_CONVENTION_NAME);
//if the project of the dependency wasn't parsed
yet, java plugin is not applied, so we can't get it. Save for later.
if (javaPlugin == null) {
List<DepDef> moduleDeps = (List<DepDef>)
projectDependency.getProperties().get(DEPENDENCIES_KEY);
if (moduleDeps == null) {
moduleDeps = new ArrayList<DepDef>();
projectDependency.setProperty(DEPENDENCIES_KEY, moduleDeps);
}
moduleDeps.add(new DepDef(project,
configurationName));
dependency = null;
} else {
FileCollection testClasses =
((JavaPluginConvention)
javaPlugin).getSourceSets().getByName("test").getOutput();
dependency = new
DefaultSelfResolvingDependency(testClasses);
}
} else {
configurationName =
ModuleDescriptor.DEFAULT_CONFIGURATION;
dependency = new
DefaultProjectDependency(projectDependency, configurationName,
project.getGradle().getStartParameter().getProjectDependenciesBuildInstruction());
}
}
if (dependency != null) {
project.getLogger().lifecycle(" adding dep " + dependency.getName() + ": " +
dependency + " to config " + configuration.getName() + ", name " +
configurationName);
configuration.addDependency(dependency);
}
}
}
}
}
private void collectAllProjects(Project project, Set<Project> allProjects) {
allProjects.addAll(project.getAllprojects());
Project parent = project.getParent();
if (parent != null) {
collectAllProjects(parent, allProjects);
}
}
private void readMavenProject() throws ComponentLookupException,
MavenExecutionRequestPopulationException, ProjectBuildingException {
ProjectBuilder builder = container.lookup(ProjectBuilder.class);
RepositorySystemSession repositorySession = new
DefaultRepositorySystemSession();
MavenExecutionRequest executionRequest = new
DefaultMavenExecutionRequest();
MavenExecutionRequestPopulator populator =
container.lookup(MavenExecutionRequestPopulator.class);
populator.populateFromSettings(executionRequest, mavenSettings);
populator.populateDefaults(executionRequest);
ProjectBuildingRequest buildingRequest =
executionRequest.getProjectBuildingRequest();
buildingRequest.setValidationLevel(ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL);
mavenProject = builder.build(new File(project.getProjectDir(),
"pom.xml"), buildingRequest).getProject();
reactorProjects = transform(builder.build(ImmutableList.of(new
File("pom.xml")), true, buildingRequest), new Function<ProjectBuildingResult,
MavenProject>() {
public MavenProject apply(ProjectBuildingResult from) {
return from.getProject();
}
});
MavenExecutionResult result = new DefaultMavenExecutionResult();
result.setProject(mavenProject);
MavenSession session = new MavenSession(container, repositorySession,
executionRequest, result);
session.setCurrentProject(mavenProject);
}
private void buildContainer() throws PlexusContainerException {
ContainerConfiguration containerConfiguration = new
DefaultContainerConfiguration()
.setClassWorld(new ClassWorld("plexus.core",
this.getClass().getClassLoader()))
.setName("mavenCore");
container = new DefaultPlexusContainer(containerConfiguration);
}
private static class DepDef {
public final Project project;
public final String configuration;
public DepDef(Project project, String configuration) {
this.configuration = configuration;
this.project = project;
}
}
}
package org.gradle.plugin.maven;
import java.util.Map;
import static com.google.common.collect.ImmutableMap.of;
class ObjectConverter {
private static final String JAVA_PLUGIN_NAME = "java";
private static final String WAR_PLUGIN_NAME = "war";
private static final String EAR_PLUGIN_NAME = "ear";
private static final Map<String, String> packagingToPlugin = of(
"jar", JAVA_PLUGIN_NAME,
"war", WAR_PLUGIN_NAME,
"ear", EAR_PLUGIN_NAME);
private static final Map<String, ? extends Map<String, String>>
scopeToConfigurationAccordingToPackaging = of(
"compile", of("jar", "compile", "war", "compile", "ear", "deploy"),
"test", of("jar", "testCompile", "war", "testCompile", "ear",
"testCompile"),
"runtime", of("jar", "runtime", "war", "runtime", "ear", "earlib"),
"provided", of("jar", "provided", "war", "providedCompile", "ear",
"provided"));
public static String packaging2Plugin(String packaging) {
return packagingToPlugin.get(packaging);
}
public static String scope2Configuration(String scope, String packaging) {
return
scopeToConfigurationAccordingToPackaging.get(scope).get(packaging);
}
}
FAILURE: Build failed with an exception.
* Where:
Build file '/Users/gileadis/Projects/Chapter33/Trunk/Product/build.gradle'
line: 35
* What went wrong:
A problem occurred evaluating root project 'Parent'.
Cause: Configuration ':External:compile' does not allow modification.
* Try:
Run with --info or --debug option to get more log output.
* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating root
project 'Parent'.
at
org.gradle.groovy.scripts.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:51)
at
org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:127)
at
org.gradle.configuration.BuildScriptProcessor.evaluate(BuildScriptProcessor.java:38)
at
org.gradle.configuration.DefaultProjectEvaluator.evaluate(DefaultProjectEvaluator.java:38)
at
org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:487)
at
org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:71)
at
org.gradle.configuration.ProjectEvaluationConfigurer.execute(ProjectEvaluationConfigurer.java:23)
at
org.gradle.configuration.ProjectEvaluationConfigurer.execute(ProjectEvaluationConfigurer.java:21)
at
org.gradle.configuration.DefaultBuildConfigurer$1.execute(DefaultBuildConfigurer.java:38)
at
org.gradle.configuration.DefaultBuildConfigurer$1.execute(DefaultBuildConfigurer.java:35)
at
org.gradle.api.internal.project.AbstractProject.configure(AbstractProject.java:463)
at
org.gradle.api.internal.project.AbstractProject.allprojects(AbstractProject.java:458)
at
org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:35)
at
org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:141)
at
org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:112)
at
org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:80)
at org.gradle.launcher.RunBuildAction.execute(RunBuildAction.java:41)
at org.gradle.launcher.RunBuildAction.execute(RunBuildAction.java:27)
at
org.gradle.launcher.ExceptionReportingAction.execute(ExceptionReportingAction.java:32)
at
org.gradle.launcher.ExceptionReportingAction.execute(ExceptionReportingAction.java:21)
at
org.gradle.launcher.CommandLineActionFactory$WithLoggingAction.execute(CommandLineActionFactory.java:219)
at
org.gradle.launcher.CommandLineActionFactory$WithLoggingAction.execute(CommandLineActionFactory.java:203)
at org.gradle.launcher.Main.execute(Main.java:55)
at org.gradle.launcher.Main.main(Main.java:40)
at
org.gradle.launcher.ProcessBootstrap.runNoExit(ProcessBootstrap.java:49)
at org.gradle.launcher.ProcessBootstrap.run(ProcessBootstrap.java:31)
at org.gradle.launcher.GradleMain.main(GradleMain.java:24)
Caused by: java.lang.UnsupportedOperationException: Configuration
':External:compile' does not allow modification.
at
org.gradle.api.internal.file.AbstractFileCollection.add(AbstractFileCollection.java:95)
at
org.gradle.plugin.maven.GradleM2MetadataPlugin.apply(GradleM2MetadataPlugin.java:119)
at
org.gradle.plugin.maven.GradleM2MetadataPlugin.apply(GradleM2MetadataPlugin.java:1)
at
org.gradle.api.internal.plugins.DefaultProjectsPluginContainer.providePlugin(DefaultProjectsPluginContainer.java:107)
at
org.gradle.api.internal.plugins.DefaultProjectsPluginContainer.addPluginInternal(DefaultProjectsPluginContainer.java:71)
at
org.gradle.api.internal.plugins.DefaultProjectsPluginContainer.apply(DefaultProjectsPluginContainer.java:37)
at
org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.applyPlugin(DefaultObjectConfigurationAction.java:101)
at
org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.access$200(DefaultObjectConfigurationAction.java:32)
at
org.gradle.api.internal.plugins.DefaultObjectConfigurationAction$3.run(DefaultObjectConfigurationAction.java:72)
at
org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.execute(DefaultObjectConfigurationAction.java:114)
at
org.gradle.api.internal.project.AbstractProject.apply(AbstractProject.java:854)
at
build_2jfhgqb6nuib8q0detbhmn82pk$_run_closure2.doCall(/Users/gileadis/Projects/Chapter33/Trunk/Product/build.gradle:35)
at org.gradle.util.ConfigureUtil.configure(ConfigureUtil.java:61)
at org.gradle.util.ConfigureUtil.configure(ConfigureUtil.java:31)
at
org.gradle.api.internal.project.AbstractProject.configure(AbstractProject.java:874)
at
org.gradle.api.internal.project.AbstractProject.configure(AbstractProject.java:879)
at
org.gradle.api.internal.project.AbstractProject.subprojects(AbstractProject.java:862)
at
org.gradle.api.internal.BeanDynamicObject.invokeMethod(BeanDynamicObject.java:158)
at
org.gradle.api.internal.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:93)
at
org.gradle.api.internal.project.DefaultProject_Decorated.invokeMethod(Unknown
Source)
at
org.gradle.groovy.scripts.BasicScript.methodMissing(BasicScript.groovy:68)
at
build_2jfhgqb6nuib8q0detbhmn82pk.run(/Users/gileadis/Projects/Chapter33/Trunk/Product/build.gradle:14)
at
org.gradle.groovy.scripts.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:49)
... 26 more
BUILD FAILED
Total time: 5.374 secs
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email