ant-ivy-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jim White <...@pagesmiths.com>
Subject Re: Embedded ivy
Date Mon, 22 Sep 2008 05:46:25 GMT
I embed Ivy into IFCX Wings, but I do it via the Ant tasks.  That will 
provide the best compatibility going forward as they will change less 
than the Java API.

http://www.ifcx.org/wiki/Wings.html

The code is in Groovy and looks like this:

http://ifcx.svn.sourceforge.net/viewvc/ifcx/Wings/trunk/OpenOffice/WingsEval.groovy?revision=151&view=markup#l_2383

def ivy_resolve(WingsEngineSettings engineSettings, def ivy_file, 
URLClassLoader classLoader)
{
     final WingsContext context = engineSettings.context

     final AntBuilder ant = new AntBuilder(createAntProject(context), 
new Target())

     def ant_ivy = groovy.xml.NamespaceBuilder.newInstance(ant, 
'antlib:org.apache.ivy.ant')
     ant.property(name:'ivy.dep.file', location:ivy_file)
     ant_ivy.resolve()
     ant_ivy.cachefileset(setid:'cache-files-id')
     ant.path { fileset(refid:'cache-files-id') }

     final List jars = ant.path { fileset(refid:'cache-files-id') 
}.collect { it.file.toURI().toURL() }

     if (null == classLoader) classLoader = 
engineSettings.context.contextClassLoader

     // Only add JARs that aren't already in the list.
     // TODO: Do duplicate/conflict resolution stuff through Ivy.
     (jars - (classLoader.getURLs() as List)).each { URL jar -> 
classLoader.addURL(jar) }

     return jars
}


I realize that isn't much use to folks who aren't using Groovy, and 
having your Java example is very helpful.  But using Ant from Java is 
really pretty simple.  A bit a code I wrote to demonstrate that a while 
ago is:

import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.taskdefs.Echo;
import org.apache.tools.ant.taskdefs.ExecTask;

import java.io.File;

public class java2ant
{
    public static void main(final String[] args)
    {
       final Project project = new Project();

       project.init();

       final Echo echo = (Echo) project.createTask("echo");

       echo.setMessage("Hello World");
       echo.setFile(new File("output.txt"));
       echo.execute();

       final ExecTask exec = (ExecTask) project.createTask("exec");

       exec.setExecutable("ls");
       exec.setOutput(new File("execoutput.txt"));
       exec.execute();
    }
}

That's available here:

http://pagesmiths.com/ant/

An article on the topic:

http://www.ibm.com/developerworks/websphere/library/techarticles/0502_gawor/0502_gawor.html

I don't have an example of how to call an Antlib task from Java though. 
  Perhaps this article might help (although a quick scan didn't show 
anything directly applicable):

http://www.onjava.com/pub/a/onjava/2006/08/09/ant-1-7-using-antlibs.html?page=2

Jim

Ilya Sterin wrote:

> Ok, so I think I figured it out, but still not sure if anything is out
> of the ordinary.  I took bits and pieces of this from the ivy
> Main.main method...
> 
> Ivy ivy = Ivy.newInstance();
>         ivy.configureDefault();
> 
>         File ivyfile = File.createTempFile("ivy", ".xml");
>         ivyfile.deleteOnExit();
>         String[] dep = new String[]{"commons-lang", "commons-lang", "1.0"};
>         DefaultModuleDescriptor md = DefaultModuleDescriptor
>                 .newDefaultInstance(ModuleRevisionId.newInstance(dep[0],
>                         dep[1] + "-caller", "working"));
>         DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor(md,
>                 ModuleRevisionId.newInstance(dep[0], dep[1], dep[2]),
> false, false, true);
>         md.addDependency(dd);
>         XmlModuleDescriptorWriter.write(md, ivyfile);
> 
>         String[] confs = new String[]{"default"};
>         ResolveOptions resolveOptions = new ResolveOptions().setConfs(confs);
>         ResolveReport report = ivy.resolve(ivyfile.toURL(), resolveOptions);
> 
> It would be nice for someone to document this.  I can imagine many
> systems wanting to use ivy's resolution mechanism outside of the ant
> process.
> 
> Ilya
> ...


Mime
View raw message