On 05/07/2011, at 9:09 PM, Ruediger Schobbert wrote:
> Hi,
>
> I have written a little plugin which adds common repositories. I use this
> plugin for all my projects which saves me the repositories block in my
> build.gradle files. I also add my standard Ivy upload repository. Now I added
> the functionality to prevent uploading the same version twice. For querying
> the Ivy repository I use this code block in my plugin:
>
> <code>
> import org.apache.ivy.core.search.OrganisationEntry
> import org.apache.ivy.core.search.ModuleEntry
> import org.apache.ivy.core.search.RevisionEntry
>
> ... more code ...
>
> project.tasks.uploadArchives {
> doFirst {
> def uploadRepositoryName = 'myUploadRepo'
> def uplRepo = project.uploadArchives.repositories[uploadRepositoryName]
>
> OrganisationEntry org = new OrganisationEntry(uplRepo, project.group);
> ModuleEntry mod = new ModuleEntry(org, project.name);
> RevisionEntry[] revs = uplRepo.listRevisions(mod)
>
> for (nextRev in revs) {
> if (project.version == nextRev.revision) {
> throw new GradleException('!!!This version was already
> published!!!')
> }
> }
> }
> }
> </code>
>
>
> If I add my (upload) repository to the project.respositories by adding a new
> org.apache.ivy.plugins.resolver.SshResolver and add it to the
> project.uploadArchives.repositories by referencing the one from the
> project.respositories this works.
>
> But actually I don't want my uploadRepo to be used for resolving
> dependencies, therefore I removed it from the project.respositories and added
> it directly to the project.uploadArchives.repositories but then a
> NullPointerException is thrown:
>
> * Exception is:
> org.gradle.api.tasks.TaskExecutionException: Execution failed for task
> ':uploadArchives'.
> at
> org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:71)
> at
> org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:48)
> at
> org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:34)
> at
> org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:55)
> at
> org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:57)
> at
> org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:41)
> at
> org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:51)
> at
> org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:52)
> at
> org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:42)
> at org.gradle.api.internal.AbstractTask.execute(AbstractTask.java:237)
> at
> org.gradle.execution.DefaultTaskGraphExecuter.executeTask(DefaultTaskGraphExecuter.java:167)
> at
> org.gradle.execution.DefaultTaskGraphExecuter.doExecute(DefaultTaskGraphExecuter.java:160)
> at
> org.gradle.execution.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:78)
> at
> org.gradle.execution.TaskNameResolvingBuildExecuter.execute(TaskNameResolvingBuildExecuter.java:113)
> at
> org.gradle.execution.DelegatingBuildExecuter.execute(DelegatingBuildExecuter.java:54)
> at
> org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:158)
> 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:46)
> at org.gradle.launcher.ProcessBootstrap.run(ProcessBootstrap.java:28)
> at org.gradle.launcher.GradleMain.main(GradleMain.java:24)
> Caused by: java.lang.NullPointerException
> at
> org.apache.ivy.plugins.resolver.AbstractPatternsBasedResolver.filterNames(AbstractPatternsBasedResolver.java:370)
> at
> org.apache.ivy.plugins.resolver.RepositoryResolver.findTokenValues(RepositoryResolver.java:298)
> at
> org.apache.ivy.plugins.resolver.AbstractPatternsBasedResolver.findIvyNames(AbstractPatternsBasedResolver.java:229)
> at
> org.apache.ivy.plugins.resolver.AbstractPatternsBasedResolver.findNames(AbstractPatternsBasedResolver.java:213)
> at
> org.apache.ivy.plugins.resolver.BasicResolver.listRevisions(BasicResolver.java:846)
> at
> org.apache.ivy.plugins.resolver.DependencyResolver$listRevisions.call(Unknown
> Source)
> at
> de.emesit.gradle.emesitproject.EmesitProjectPlugin$_applyWithoutUploadRepository_closure4_closure11.doCall(EmesitProjectPlugin.groovy:113)
> at
> org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:443)
> at
> org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:431)
> at
> org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:63)
> ... 28 more
>
>
>
> If I look in the source code of the AbstractPatternsBasedResolver, this line:
>
> getSettings().filterIgnore(names);
>
> causes the NPE. Therefore I assume that gradle at some point sets the
> settings if the resolver is added to the project.repositories (or the
> settings get set by some method call like resolve() or similar).
Correct, this is done just before resolve/publish by the SettingsConverter.
>
> Therefore my question:
> How can I make sure, the settings are set, or is there another way to query
> existing versions in my uploadRepo?
You'll have to manually wire it in for now.
uplRepo.settings =
project.services.get(org.gradle.api.internal.artifacts.IvyService).settingsConverer.ivySettings
Please raise an issue for this use case so we can come up with a better
solution.
--
Luke Daley
Principal Engineer, Gradleware
http://gradleware.com
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email