-
Bug
-
Resolution: Fixed
-
Minor
-
None
My company uses a different versioning notation, e.g. R1A01 instead of 1.0.1-1. This has resulted in a custom latest strategy which I add to each project as follows:
<dependencies>
<dependency org="com.bla.bla" name="ftf" rev="R1A01" conf="test-compile->api;test-runtime->runtime"/>
<conflict org="com.bla.bla.*" manager="latest-product-revision-conflict-manager"/>
</dependencies>
This works fine outside Hudson of course but when running the build in Hudson, I get the following exception:
ERROR: Failed to parse ivy.xml files
java.io.IOException: Unable to parse ivy descriptors
at hudson.ivy.IvyModuleSetBuild$RunnerImpl.parseIvyDescriptorFiles(IvyModuleSetBuild.java:532)
at hudson.ivy.IvyModuleSetBuild$RunnerImpl.doRun(IvyModuleSetBuild.java:368)
at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:416)
at hudson.model.Run.run(Run.java:1244)
at hudson.ivy.IvyModuleSetBuild.run(IvyModuleSetBuild.java:283)
at hudson.model.ResourceController.execute(ResourceController.java:88)
at hudson.model.Executor.run(Executor.java:122)
Caused by: java.lang.NullPointerException
at org.apache.ivy.core.sort.CollectionOfModulesToSort.addToModulesByModuleId(CollectionOfModulesToSort.java:71)
at org.apache.ivy.core.sort.CollectionOfModulesToSort.<init>(CollectionOfModulesToSort.java:66)
at org.apache.ivy.core.sort.ModuleDescriptorSorter.<init>(ModuleDescriptorSorter.java:51)
at org.apache.ivy.core.sort.SortEngine.sortModuleDescriptors(SortEngine.java:99)
at org.apache.ivy.Ivy.sortModuleDescriptors(Ivy.java:639)
at hudson.ivy.IvyModuleSetBuild$IvyXmlParser.call(IvyModuleSetBuild.java:798)
at hudson.ivy.IvyModuleSetBuild$IvyXmlParser.call(IvyModuleSetBuild.java:744)
at hudson.remoting.UserRequest.perform(UserRequest.java:114)
at hudson.remoting.UserRequest.perform(UserRequest.java:48)
at hudson.remoting.Request$2.run(Request.java:270)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
which is understandable as the embedded Ivy has no notion of our custom conflict manager/latest strategy.
Is there any way to make the plugin to disregard this configuration line as it has no impact on the plugin itself or make it work in some other way? I have seen that Ivy configurations can be defined on main Hudson configuration page but I do not understand how they can be used from a project/job (Ivy project type).
The Ivy configurations in the global config page only apply to the Freestyle project Ivy trigger. The Ivy project support was coded separately and they don't really tie in together.
I don't think there is any way to just ignore that line since the actual parsing is done by Ivy itself. I think the only solution would be to configure Ivy properly prior to parsing the ivy.xml files (and to do that the project would need to know where your ivy settings xml file is).
For a particular build, where is your ivy settings xml file usually located? Is it always checked out at some path relative to the workspace? Is that path different for each project? The global config for ivy settings never made much sense to me as we always have our ivysettings.xml file checked out in our workspace, and depending on what slave machine it's run on it could be at a different path.
The solution I'm leaning towards would be a per-project textfield where you could specify a workspace-relative path to the settings file. The downside is that this would need to be configured in every project.
What are your thoughts on this?