I'm having an issue with importing modules from a public maven repo (http://repo1.maven.org/maven2). I'm following the tutorial "Building a repository" with namespace rules (http://ant.apache.org/ivy/history/latest-milestone/tutorial/build-repository/advanced.html), to import log4j version 1.2.16

At first I was having getting errors about attempts to overwrite an artifact. At that point I was using the following artifact pattern:
${basedir}/repository/[organisation]/[module]/[revision]/[artifact].[ext]

Looking at the ivy file for log4j, I saw that the jars and noticed that the artifacts for various jars all had the same name:
<publications>
<artifact name="log4j" type="bundle" ext="jar" conf="master"/>
<artifact name="log4j" type="source" ext="jar" conf="sources" m:classifier="sources"/> <artifact name="log4j" type="javadoc" ext="jar" conf="javadoc" m:classifier="javadoc"/>
</publications>

So I added [conf] to the path and tried again, it still didn't work, so I added [type] (Artifact pattern: "${basedir}/repository/[organisation]/[module]/[revision]/[conf]/[type]s/[artifact].[ext]")
and got the following directory structure:

apache/log4j/1.2.16/
    - default/
        - bundles/
            - log4j.jar
            - log4j.jar.md5
            - log4j.jar.sha1
        - javadocs/
            - log4j.jar
            - log4j.jar.md5
            - log4j.jar.sha1
        - sources/
            - log4j.jar
            - log4j.jar.md5
            - log4j.jar.sha1

Where the artifacts for the three configurations are all under "default" rather than "master", "sources", and "javaadoc". Is there something I'm missing here about the way [conf] works in the pattern? (really wish I could get at the classifier :) )

Thanks,
-n


The full ivy file for log4j:

<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0" xmlns:m="http://ant.apache.org/ivy/maven";>
<info organisation="apache"
        module="log4j"
        revision="1.2.16"
        status="release"
        publication="20100331002544"
        namespace="maven2"
>
<license name="The Apache Software License, Version 2.0" url="http://www.apache.org/licenses/LICENSE-2.0.txt"; />
<description homepage="http://logging.apache.org/log4j/1.2/";>
        Apache Log4j 1.2
</description>
<m:maven.plugins>org.apache.maven.plugins__maven-resources-plugin__null|null__maven-surefire-plugin__2.5|null__maven-compiler-plugin__2.1|null__maven-jar-plugin__2.3|null__maven-antrun-plugin__1.2|null__maven-assembly-plugin__2.2-beta-5|null__maven-javadoc-plugin__2.6.1|null__maven-release-plugin__2.0-beta-9|null__maven-source-plugin__2.1.1|org.codehaus.mojo__clirr-maven-plugin__2.2.2|org.codehaus.mojo__rat-maven-plugin__1.0-alpha-3|org.apache.felix__maven-bundle-plugin__2.0.1</m:maven.plugins>
</info>
<configurations>
<conf name="default" visibility="public" description="runtime dependencies and master artifact can be used with this conf" extends="runtime,master"/> <conf name="master" visibility="public" description="contains only the artifact published by this module itself, with no transitive dependencies"/> <conf name="compile" visibility="public" description="this is the default scope, used if none is specified. Compile dependencies are available in all classpaths."/> <conf name="provided" visibility="public" description="this is much like compile, but indicates you expect the JDK or a container to provide it. It is only available on the compilation classpath, and is not transitive."/> <conf name="runtime" visibility="public" description="this scope indicates that the dependency is not required for compilation, but is for execution. It is in the runtime and test classpaths, but not the compile classpath." extends="compile"/> <conf name="test" visibility="private" description="this scope indicates that the dependency is not required for normal use of the application, and is only available for the test compilation and execution phases." extends="runtime"/> <conf name="system" visibility="public" description="this scope is similar to provided except that you have to provide the JAR which contains it explicitly. The artifact is always available and is not looked up in a repository."/> <conf name="sources" visibility="public" description="this configuration contains the source artifact of this module, if any."/> <conf name="javadoc" visibility="public" description="this configuration contains the javadoc artifact of this module, if any."/> <conf name="optional" visibility="public" description="contains all optional dependencies"/>
</configurations>
<publications>
<artifact name="log4j" type="bundle" ext="jar" conf="master"/>
<artifact name="log4j" type="source" ext="jar" conf="sources" m:classifier="sources"/> <artifact name="log4j" type="javadoc" ext="jar" conf="javadoc" m:classifier="javadoc"/>
</publications>
<dependencies>
<dependency org="javax.mail" name="mail" rev="1.4.1" force="true" conf="optional->compile(*),master(*)"/> <dependency org="apache" name="oro" rev="2.0.8" force="true" conf="test->runtime(*),master(*)"/> <dependency org="junit" name="junit" rev="3.8.2" force="true" conf="test->runtime(*),master(*)"/> <dependency org="org.apache.geronimo.specs" name="geronimo-jms_1.1_spec" rev="1.0" force="true" conf="optional->compile(*),master(*)"/>
</dependencies>
</ivy-module>


Reply via email to