user1768830
user1768830

Reputation:

Ivy won't publish to my local repo

From my build.xml:

<?xml version="1.0" encoding="utf-8" ?>
<project name="myapp" default="package-core" basedir=".."
        xmlns:ivy="antlib:org.apache.ivy.ant"
        xmlns:antcontrib="antlib:net.sf.antcontrib">
    <target name="bootstrap">
        <taskdef resource="org/apache/ivy/ant/antlib.xml"
                uri="antlib:org.apache.ivy.ant" classpathref="build.path"/>
        </target>

    <target name="resolve" depends="bootstrap">
        <ivy:settings url="${ivy.settings.home}"/>
        <ivy:cleancache/>
        <ivy:resolve file="build/${ivy.xml}"/>
        <ivy:retrieve pattern="${gen.lib.main.dir}/[artifact]-[revision].[ext]" conf="main"/>
        <ivy:report todir="${gen.staging.dir}" />
    </target>

    ...omitted for brevity

    <target name="publish" depends="compile">
        <ivy:publish resolver="default-resolver" pubrevision="0.2.0" overwrite="true" update="true">   
            <artifacts pattern="${gen.dist.pub.dir}/[artifact].[ext]" />   
        </ivy:publish>
    </target>

My ivy.xml:

<?xml version="1.0" encoding="UTF-8"?>  
<ivy-module version="2.0"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">  
    <info organisation="myapp" module="myapp"/>
    <configurations>
        <conf name="main" description="provides main dependencies for the client JAR"/>
    </configurations>
    <dependencies>
        <!-- Main dependencies. -->
        <dependency org="google" name="guava" rev="14.0" conf="main->*"/>
        <dependency org="google" name="guice" rev="3.0" conf="main->*"/>
    </dependencies>
</ivy-module>

My ivy-settings.xml:

<ivysettings>  
    <properties file="ivy-settings.properties"/>
    <settings defaultResolver="default-resolver"/>
    <latest-strategies>
        <latest-lexico/>
    </latest-strategies>
    <credentials host="${ivy.repo.root}" realm="${ivy.std.repo.realm}"
            username="${ivy.std.repo.username}" password="${ivy.std.repo.password}"/>
    <resolvers>  
        <chain name="default-resolver" returnFirst="true">
            <url name="std-repo">
                <ivy pattern="${ivy.repo.root}/${ivy.module.pattern}"/>
                <artifact pattern="${ivy.repo.root}/${ivy.artifact.pattern}"/>
            </url>
        </chain>
    </resolvers>  
    <modules>
        <module organisation="myapp" name="*" resolver="default-resolver"/>
    </modules>
</ivysettings>

Question:

When I run the resolve target, I successfully pull down the Guava and Guice JARs (and all their dependencies). So I know I have this set up, at least partially correct.

But when I run the publish target, I get the following error:

[jar] Building jar: /home/myuser/sandbox/dsi/workbench/eclipse/workspace/myapp/gen/dist/myapp-server
publish:
[ivy:publish] :: loading settings :: url = jar:file:/home/myuser/sandbox/dsi/workbench/eclipse/4.2/eclipse/plugins/org.apache.ivy.eclipse.ant_2.3.0.final_20130110142753/ivy.jar!/org/apache/ivy/core/settings/ivysettings.xml

BUILD FAILED
/home/myuser/sandbox/dsi/workbench/eclipse/workspace/myapp/build/build-core.xml:289: no organisation provided for ivy publish task: It can either be set explicitely via the attribute 'organisation' or via 'ivy.organisation' property or a prior call to <resolve/>

Any ideas? Thanks in advance!

Upvotes: 1

Views: 1405

Answers (1)

Maarten Coene
Maarten Coene

Reputation: 343

You have to call 'publish' and 'resolve' in the same Ant session. If you call them separately it won't work and you'll get this error message.

For instance, you could let the 'publish' target depend on the 'resolve' target:

<target name="publish" depends="resolve,compile">
...
</target>

Hope this helps, Maarten

Upvotes: 2

Related Questions