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).
Therefore my question:
How can I make sure, the settings are set, or is there another way to query existing versions in my
uploadRepo?
Thanks,
Rüdiger Schobbert
--
emesit GmbH & Co. KG
Henkestr. 91
91052 Erlangen
Handelsregister:
HRA 8321, Fürth/Bayern
Komplementär:
emesit Beteiligungs-GmbH
HRB 10201, Fürth/Bayern
Geschäftsführer:
Ralph Mayr, Rüdiger Schobbert
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email