You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ivy-user@ant.apache.org by Claudio Miranda <cl...@claudius.com.br> on 2010/02/25 18:34:06 UTC

Publish ivydata for source type

Hi, currently my project has a publish task to the local ivy cache and it
(looks to) works.

The issue is the IvyDE is not able to pickup the sources as it reads a
ivy.xml from repo that doesn't have the sources configuration.

Let me say that the modules and artifacts are published to the ivy local
cache.
I see that ivy creates a ivy-${version}.xml and
ivydata-${version}.properties at ${ivy.cache.dir}/[organisation]/[artifact]/
when ivy resolves the dependency (see 8 below)

The publish task (see 3 below) creates the following directories: jars and
sources
${ivy.cache.dir}/[organisation]/[artifact]/[type]s/

I see that if I manually change the
${ivy.cache.dir}/[organisation]/[artifact]/ivy-1.1-SNAPSHOT.xml to include
the sources configuration, IvyDE can pickup the sources instantly.
If I uncomment the <ivy pattern=... at ivysettings.xml the
ivy-1.1-SNAPSHOT.xml is published to the [organisation]/[artifact] directory
but the resolve task of the other project (who dependes of
commons-framework) fails (see 9 below).
In this case looks the ivydata-1.1-SNAPSHOT.properties is missing.

I ask:
a) is there any best practice to use the local repo and ivy cache as the
same directory ?
b) Having the local repository the same as the ivy cache, how to publish the
sources and have it resolved by IvyDE ?

Thanks 

Claudio

See the pertinent configurations:

==> 1) ivy.xml
<ivy-module version="2.0" xmlns:m="http://ant.apache.org/ivy/maven" >
    <info module="commons-framework" organisation="com.corps"
revision="${version}"/>
    <configurations>
        <conf name="compile" extends="runtime"/>
        <conf name="runtime" transitive="false" />
        <conf name="default" visibility="public"/>
    </configurations>
    <publications>
        <artifact name="${ant.project.name}"  type="jar" ext="jar"
conf="compile" />
        <artifact name="${ant.project.name}"  type="source" ext="jar"
m:classifier="sources" conf="compile"/>
    </publications>
    <dependencies>
some dependencies...
    </dependencies>
</ivy-module>

=================================================================
==> 2) ivysettings.xml

<ivysettings>
    <!-- The import order is important -->
    <!-- The build-local must override build-shared  -->
    <properties file="build-shared.properties" />
    <properties file="build-local.properties" />
    <settings defaultResolver="default" />
    <resolvers>
        <ibiblio name="repo-corps" m2compatible="true" usepoms="false"
            root="${nexus.host_port}/nexus/content/groups/public/" />
            
        <filesystem name="local-ivy-cache">
            <!-- <ivy
pattern="${local.ivy.cache.dir}/[organisation]/[module]/[artifact]-[revision](-[classifier]).[ext]"
/> -->
            <artifact
pattern="${local.ivy.cache.dir}/[organisation]/[module]/[type]s/[artifact]-[revision](-[classifier]).[ext]"
/>
        </filesystem>
        <chain name="default" returnFirst="true">
            <resolver ref="local-ivy-cache"/>
            <resolver ref="repo-corps"/>
        </chain>
    </resolvers>
    <caches defaultCacheDir="${local.ivy.cache.dir}" checkUpToDate="true" />
</ivysettings>


=================================================================
==> 3) publish task at build.xml

<target name="publish" description="==> Copy the JAR file to the ivy local
cache (local disk).">
    <mkdir dir="${dist.dir}/source" />
    <jar basedir="${src.dir}"
destfile="${dist.dir}/source/${ant.project.name}-${version}-sources.jar" />
    <ivy:publish forcedeliver="true" overwrite="true" update="true"
resolver="local-ivy-cache" pubrevision="${version}" >
        <artifacts
pattern="${dist.dir}/[type]/[artifact]-[revision](-[classifier]).[ext]" />
    </ivy:publish>
    <echo message="project ${ant.project.name} released with version
${ivy.revision}" />
</target>

=================================================================
==> 4) The dist directory

 C:\alphaworks_corps\commons-framework\dist\ivy\ivy-1.1-SNAPSHOT.xml

C:\alphaworks_corps\commons-framework\dist\jar\commons-framework-1.1-SNAPSHOT.jar

C:\alphaworks_corps\commons-framework\dist\source\commons-framework-1.1-SNAPSHOT-sources.jar

=================================================================
==> 5) The dist\ivy\ivy-1.1-SNAPSHOT.xml


<ivy-module version="2.0" xmlns:m="http://ant.apache.org/ivy/maven">
    <info organisation="com.corps" module="commons-framework"
revision="1.1-SNAPSHOT" status="integration" publication="20100225135226"/>
    <configurations>
        <conf name="compile" extends="runtime"/>
        <conf name="runtime" transitive="false"/>
        <conf name="default" visibility="public"/>
    </configurations>
    <publications>
        <artifact name="commons-framework" type="jar" ext="jar"
conf="compile"/>
        <artifact name="commons-framework" type="source" ext="jar"
m:classifier="sources" conf="compile"/>
    </publications>
    <dependencies>
some dependencies        
    </dependencies>
</ivy-module>

=================================================================
==> 6) At the ivy.cache.dir=c:/temp/ivy-cache


C:\temp\ivy-cache\com.corps\commons-framework\jars

25/02/2010  13:52            94.242 commons-framework-1.1-SNAPSHOT.jar
25/02/2010  13:52                32 commons-framework-1.1-SNAPSHOT.jar.md5
25/02/2010  13:52                40 commons-framework-1.1-SNAPSHOT.jar.sha1

C:\temp\ivy-cache\com.corps\commons-framework

25/02/2010  13:52    <DIR>          ivys
25/02/2010  13:52    <DIR>          jars
25/02/2010  13:52    <DIR>          sources

C:\temp\ivy-cache\com.corps\commons-framework\ivys

25/02/2010  13:52             2.148 ivy-1.1-SNAPSHOT.xml
25/02/2010  13:52                32 ivy-1.1-SNAPSHOT.xml.md5
25/02/2010  13:52                40 ivy-1.1-SNAPSHOT.xml.sha1

=================================================================
==> 7) other project that have commons-framework-1.1-SNAPSHOT.jar as
dependency

ant compile 

[ivy:resolve]   found com.corps#commons-framework;1.1-SNAPSHOT in
local-ivy-cache

=================================================================
==> 8)  after 7) does an 'ant compile'

C:\temp\ivy-cache\com.corps\commons-framework 

25/02/2010  14:20               445 ivy-1.1-SNAPSHOT.xml
25/02/2010  14:20               161 ivydata-1.1-SNAPSHOT.properties

type C:\temp\ivy-cache\com.corps\commons-framework\ivy-1.1-SNAPSHOT.xml

<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="1.0">
    <info organisation="com.corps"
        module="commons-framework"
        revision="1.1-SNAPSHOT"
        status="release"
        publication="20100225142018"
        default="true"
    />
    <configurations>
        <conf name="default" visibility="public"/>
    </configurations>
    <publications>
        <artifact name="commons-framework" type="jar" ext="jar"
conf="default"/>
    </publications>
</ivy-module>


It doesn't have the 'source' configuration 
=================================================================
==> 9) 'ant compile' when publish task copy the
dist\ivys\ivy-1.1-SNAPSHOT.xml to
C:\temp\ivy-cache\com.corps\commons-framework\ivy-1.1-SNAPSHOT.xml

In this case looks the ivydata-1.1-SNAPSHOT.properties is missing

[ivy:resolve]   found com.corps#commons-framework;1.1-SNAPSHOT in default
[ivy:resolve] :: resolution report :: resolve 218ms :: artifacts dl 0ms
       
---------------------------------------------------------------------
        |                  |            modules            ||   artifacts  
|
        |       conf       | number| search|dwnlded|evicted||
number|dwnlded|
       
---------------------------------------------------------------------
        |      compile     |   5   |   0   |   0   |   0   ||   4   |   0  
|
       
---------------------------------------------------------------------
[ivy:resolve]
[ivy:resolve] :: problems summary ::
[ivy:resolve] :::: ERRORS
[ivy:resolve]   unknown resolver null
[ivy:resolve]   unknown resolver null
[ivy:resolve]


-----
Claudio Miranda
http://weblogs.java.net/blog/claudio
http://www.claudius.com.br/blog
-- 
View this message in context: http://old.nabble.com/Publish-ivydata-for-source-type-tp27714488p27714488.html
Sent from the ivy-user mailing list archive at Nabble.com.


Re: Publish ivydata for source type

Posted by Mitch Gitman <mg...@gmail.com>.
Claudio, it's a really strange practice to be having one's Ivy cache double
as an Ivy repository. It's almost like you're asking Ivy to blow up. You can
avoid a whole lot of complexity by simply using a local repository that is
distinct from your cache.

The default Ivy settings--which are used if you don't specify Ivy
settings--already support a local repository. Even though, as a practical
matter, the default Ivy settings are not very usable because they make the
shared repo local, you can at least use them as a model for your own Ivy
settings. On the page
http://ant.apache.org/ivy/history/latest-milestone/tutorial/defaultconf.html,
see the passage that begins:
"By default, the local repository lies in
${ivy.default.ivy.user.dir}/local."

Following this model, your local Ivy repo becomes a sibling in the
filesystem of your Ivy cache(s).

One other thing you can do is adjust your Ivy settings for that particular
local resolver to avoid downloading the artifacts. Just use the artifacts
directly from the repo since, after all, the repo is already local. I forget
offhand what that particular attribute is.

On Thu, Feb 25, 2010 at 9:34 AM, Claudio Miranda <cl...@claudius.com.br>wrote:

>
> Hi, currently my project has a publish task to the local ivy cache and it
> (looks to) works.
>
> The issue is the IvyDE is not able to pickup the sources as it reads a
> ivy.xml from repo that doesn't have the sources configuration.
>
> Let me say that the modules and artifacts are published to the ivy local
> cache.
> I see that ivy creates a ivy-${version}.xml and
> ivydata-${version}.properties at
> ${ivy.cache.dir}/[organisation]/[artifact]/
> when ivy resolves the dependency (see 8 below)
>
> The publish task (see 3 below) creates the following directories: jars and
> sources
> ${ivy.cache.dir}/[organisation]/[artifact]/[type]s/
>
> I see that if I manually change the
> ${ivy.cache.dir}/[organisation]/[artifact]/ivy-1.1-SNAPSHOT.xml to include
> the sources configuration, IvyDE can pickup the sources instantly.
> If I uncomment the <ivy pattern=... at ivysettings.xml the
> ivy-1.1-SNAPSHOT.xml is published to the [organisation]/[artifact]
> directory
> but the resolve task of the other project (who dependes of
> commons-framework) fails (see 9 below).
> In this case looks the ivydata-1.1-SNAPSHOT.properties is missing.
>
> I ask:
> a) is there any best practice to use the local repo and ivy cache as the
> same directory ?
> b) Having the local repository the same as the ivy cache, how to publish
> the
> sources and have it resolved by IvyDE ?
>
> Thanks
>
> Claudio
>
>