Hi,

I've committed some additional improvements to the namespace handling in SVN 
trunk.
Could you give it a try to see if it solves your problems?

If not, could you please post a concrete example (ivysettings.xml and ivy.xml) ?

thanks,
Maarten



----- Original Message ----
From: "Bailey, Darragh" <[email protected]>
To: "[email protected]" <[email protected]>
Sent: Thu, June 17, 2010 10:17:56 PM
Subject: Namespaces and rules with modules like commons-lang and log4j


Using version downloaded from hudson:
[ivy:install] :: Ivy 2.2.x-local-20100609212354 - 20100609212354 :: 
http://ant.apache.org/ivy/ ::


One problem that I've noticed is that I can't use namespace rules as shown the 
the advanced settings file for the example build repository to rename the org 
on all the modules defined in that file to use "org.apache". The reason I'd 
like to do this is, so that the orgs and modules will match up to what the 
developers here write for import statements in the java files.

If I use that file as a direct example and specify the following modules to 
retrieve

   <ivy:install settingsRef="ivy.default.settings" 
organisation="org.apache.wink" module="wink-server" revision="1.1-incubating"
      from="${from.resolver}" to="${to.resolver}" transitive="true" 
overwrite="true" />
    <ivy:install settingsRef="ivy.default.settings" 
organisation="org.apache.wink" module="wink-client" revision="1.1-incubating"
      from="${from.resolver}" to="${to.resolver}" transitive="true" 
overwrite="true" />

   <ivy:install settingsRef="ivy.default.settings" organisation="apache" 
module="log4j" revision="1.2.13"
      from="${from.resolver}" to="${to.resolver}" transitive="true" 
overwrite="true" />

It works fine. But modules such as commons-lang and log4j get an org of 
"apache". Which as I mentioned previous isn't going to make it any easier for 
the developers to add dependencies than just setting up the repository without 
using namespaces. Once they have to search for the dependency it will make 
little difference in how they are named.

Make the following changes to the namespace rules 
@@ -44,7 +44,7 @@
     <namespace name="maven2">
       <rule>   <!-- imported apache maven1 projects -->
         <fromsystem>
-          <src org="apache" module=".+"/>
+          <src org="org.apache" module=".+"/>
           <dest org="$m0" module="$m0"/>
         </fromsystem>
         <tosystem>
@@ -121,7 +121,7 @@
           <src org="xmlbeans" module="xmlbeans" />
           <src org="xmlrpc" module="xmlrpc" />

-          <dest org="apache" module="$m0"/>
+          <dest org="org.apache" module="$m0"/>
         </tosystem>
       </rule>

And I now get the following error:
[ivy:install] :: problems summary ::
[ivy:install] :::: WARNINGS
[ivy:install]   the module descriptor 
http://repo1.maven.org/maven2/org/apache/wink/wink-server/1.1-incubating/wink-server-1.1-incubating.pom
 has information which can't be converted into the system namespace. It will 
require the availability of the namespace 'maven2' to be fully usable.
[ivy:install]   impossible to put metadata file in cache: 
http://repo1.maven.org/maven2/commons-lang/commons-lang/2.3/commons-lang-2.3.pom
 (2.3). java.io.FileNotFoundException: 
/build/user/darragh/ivy/cache/org.apache/commons-lang/ivy-2.3.xml.original (No 
such file or directory)
[ivy:install]
[ivy:install] :: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS

Took a look at the cache and saw the following:
cache/commons-lang/
cache/commons-lang/commons-lang
cache/commons-lang/commons-lang/ivydata-2.3.properties
cache/apache/
cache/apache/apache
cache/apache/apache/ivydata-6.properties
cache/apache/apache/ivy-6.xml.original
cache/apache/apache/ivy-6.xml
cache/apache/apache/ivydata-1.properties
cache/apache/apache/ivy-1.xml.original
cache/apache/apache/ivy-1.xml
cache/apache/commons-lang
cache/apache/commons-lang/ivydata-2.3.properties
cache/apache/commons-lang/ivy-2.3.xml.original
cache/org.apache
cache/org.apache/apache
cache/org.apache/apache/ivydata-6.properties
cache/org.apache/apache/ivydata-1.properties
cache/org.apache/commons-lang
cache/org.apache/commons-lang/ivydata-2.3.properties
cache/org.apache/commons-lang/jars
cache/org.apache/commons-lang/jars/commons-lang-2.3.jar

Looks like there are some problems with the application of the namespace rules 
with regards to some components.


Thought maybe there was some interferance with the rule that translates between 
org.apache and apache, so remove the following:
-      <rule> <!-- new apache projects -->
-        <fromsystem>
-          <src org="apache" />
-          <dest org="org.apache"/>
-        </fromsystem>
-        <tosystem>
-          <src org="org.apache" />
-          <dest org="apache" />
-        </tosystem>
-      </rule>


Retried (after deleting the cache and partially created repo) and get the 
following error:

[ivy:install] :: problems summary ::
[ivy:install] :::: WARNINGS
[ivy:install]   io problem while parsing ivy file: 
http://repo1.maven.org/maven2/org/apache/wink/wink/1.1-incubating/wink-1.1-incubating.pom:
 Impossible to load parent for 
file:/build/user/darragh/ivy/cache/org.apache.wink/wink/ivy-1.1-incubating.xml.original.
 Parent=org.apache#apache;6
[ivy:install]   io problem while parsing ivy file: 
http://repo1.maven.org/maven2/org/apache/wink/wink-server/1.1-incubating/wink-server-1.1-incubating.pom:
 Impossible to load parent for 
file:/build/user/darragh/ivy/cache/org.apache.wink/wink-server/ivy-1.1-incubating.xml.original.
 Parent=org.apache.wink#wink;1.1-incubating
[ivy:install]           module not found: 
org.apache.wink#wink-server;1.1-incubating
[ivy:install]   ==== libraries: tried
[ivy:install]     http://repo1.maven.org/maven2/apache/apache/6/apache-6.pom
[ivy:install]     -- artifact apache#apache;6!apache.jar:
[ivy:install]     http://repo1.maven.org/maven2/apache/apache/6/apache-6.jar
[ivy:install]           ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:install]           ::          UNRESOLVED DEPENDENCIES         ::
[ivy:install]           ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:install]           :: org.apache.wink#wink-server;1.1-incubating: not found
[ivy:install]           ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:install]
[ivy:install] :: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS



Is there anyway to get the end result desired using the namespace rules? 

Or is this just a limitation of the current implementation?

Or am I missing something completely obvious in their use?


--
Regards,
Darragh Bailey

Systems Software Engineer
Hewlett Packard Galway Ltd.

Postal Address:    Hewlett Packard Galway Limited, Ballybrit Business Park, 
Galway
Registered Office: Hewlett Packard Galway Limited, 63-74 Sir John Rogerson's 
Quay Dublin 2
Registered Number: 361933 


      

Reply via email to