If you rearrange your extends attributes on your conf elements, You can achieve 
what I think you’re asking.

runtime
compile extends runtime
provided extends runtime
test extends provided

You would indicate that the org.myapp dependencies are in the runtime 
configuration.

Here, when you retrieve compile or test, it would include all the libraries you 
need for those activities. But runtime would include only the libraries you 
need for deployment, and would exclude the additional libraries indicated by 
compile, provided, and test configurations.



> On May 27, 2015, at 08:18, Jaikiran Pai <jai.forums2...@gmail.com> wrote:
> 
> I'm using 2.4.0 of Ivy. I'm trying to ivy:retrieve a bunch of dependencies 
> which _do not_ belong to a specific configuration. Here's what the ivy.xml 
> looks like:
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <ivy-module version="2.0">
>    <info organisation="myfoo.org" module="hello" revision="0.0.1-SNAPSHOT"/>
> 
>    <configurations defaultconfmapping="compile->default;runtime->runtime">
>        <conf name="compile" description="Required at compile time"/>
>        <conf name="runtime" description="Required at runtime" 
> extends="compile"/>
>        <conf name="provided" description="Provided by the container 
> environment" visibility="private"/>
>        <conf name="default" description="An alias for runtime configuration" 
> extends="runtime"/>
>        <conf name="test" description="Required for tests only" 
> extends="runtime" visibility="private"/>
>    </configurations>
> 
>    <publications>
>        <artifact name="hello" type="jar" ext="zip"/>
>    </publications>
> 
> 
>    <dependencies>
>        <dependency org="org.thirdparty" name="container" rev="1.0.0" 
> conf="compile->default;provided->default;runtime->runtime;"/>
> 
>        <dependency org="org.myapp" name="foo" rev="1.0.0"/>
>        <dependency org="org.myapp" name="bar" rev="1.0.0" />
> 
>        <dependency org="org.testng" name="testng" rev="6.1.1" 
> conf="test->default"/>
> 
>    </dependencies>
> </ivy-module>
> 
> 
> What I intend to do is retrieve only the org.myapp:foo and org.myapp:bar 
> dependencies (i.e. those that don't belong to "provided" or "test" conf) into 
> a specific folder during the build. build.xml looks like:
> 
> <ivy:retrieve 
> pattern="${dist.dir}/${dist.name}/lib/[artifact](-[classifier]).[ext]" 
> conf="!provided,!test" type="jar,bundle" overwritemode="always"/>
> 
> This ends up failing with errors like:
> 
> build.xml:123: impossible to ivy retrieve: java.lang.RuntimeException: 
> problem during retrieve of org.myapp#hello: java.lang.IllegalStateException: 
> Report file '/.ivy2/cache/org.myapp-hello-!provided.xml' does not exist.
>    at 
> org.apache.ivy.core.retrieve.RetrieveEngine.retrieve(RetrieveEngine.java:249)
>    at org.apache.ivy.Ivy.retrieve(Ivy.java:561)
>    at org.apache.ivy.ant.IvyRetrieve.doExecute(IvyRetrieve.java:98)
>    at org.apache.ivy.ant.IvyTask.execute(IvyTask.java:271)
>    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
>    at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
>    at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>    at java.lang.reflect.Method.invoke(Method.java:606)
>    at 
> org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
>    at org.apache.tools.ant.Task.perform(Task.java:348)
>    at org.apache.tools.ant.Target.execute(Target.java:435)
>    at org.apache.tools.ant.Target.performTasks(Target.java:456)
>    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
>    at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
>    at 
> org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
>    at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
>    at org.apache.tools.ant.Main.runBuild(Main.java:851)
>    at org.apache.tools.ant.Main.startAnt(Main.java:235)
>    at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
>    at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
> java.lang.IllegalStateException: Report file 
> '/.ivy2/cache/org.myapp-hello-!provided.xml' does not exist.
>    at 
> org.apache.ivy.plugins.report.XmlReportParser.parse(XmlReportParser.java:285)
>    at 
> org.apache.ivy.core.retrieve.RetrieveEngine.determineArtifactsToCopy(RetrieveEngine.java:329)
>    at 
> org.apache.ivy.core.retrieve.RetrieveEngine.retrieve(RetrieveEngine.java:118)
>    ... 19 more
> 
> 
> Is there some way, I can retrieve dependencies that do not belong to specific 
> conf(s)?
> 
> -Jaikiran

Reply via email to