Nexus is basically a Maven repository, which means you need to adapt to how Maven artifacts are structured.
Since you are focused on bulk loading Nexus, I suggest looking at the answer to the following question:
Upload artifacts to Nexus without Maven
If you want to stick with ivy, read .....
Background
Maven POM required
Your first problem is that your Maven module will need a POM file. This file describes the maven module and can be easily generated from the contents of your ivy.xml file (see Solution below).
Secondly, Maven assumes that there is one main artifact. For instance:
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.myspotontheweb</groupId> <artifactId>donaldduck</artifactId> <version>1.0.1</version> <packaging>txt</packaging> </project>
The Maven client will translate this information into the following URL:
http://<host>/<repo>/com/myspotontheweb/donaldduck/1.0.1/donaldduck-1.0.1.txt
This demonstrates how Nexus can store any type of binary dependency. The default packaging parameter is jar.
How maven handles additional module artifacts
While Maven focuses on one build artifact, you can add additional additional artifacts by placing them in the same directory (as you did).
These are not those listed in Maven MOM. Instead, Maven uses the special classifier attribute. The following is a possible expression about dependency.
<dependency> <groupId>com.myspotontheweb</groupId> <artifactId>donaldduck</artifactId> <version>1.0.1</version> <classifier>metadata</classifier> <type>n3</type> </dependency>
The Maven client will translate this to the following URL:
http://<host>/<repo>/com/myspotontheweb/donaldduck/1.0.1/donaldduck-1.0.1-metadata.n3
Open source projects typically release source code this way.
Ivy Solution
So finally , how can I publish files to Nexus using ivy?
First of all, decide which artifact is the βmainβ build artifact and add an extra entry for your POM file:
<ivy-module version='2.0' xmlns:e="http://ant.apache.org/ivy/extra"> <info organisation="com.myspotonontheweb" module="donaldduck" revision="1.0.1"/> <publications> <artifact name="donaldduck" type="txt"/> <artifact name="donaldduck" type="pom"/> <artifact name="donaldduck" type="n3" e:classifier="metadata"/> <artifact name="donaldduck" type="zip" e:classifier="disto"/> </publications> </ivy-module>
Other files can also be listed, but each of them must have a unique attribute of the classifier ..... Here you will encounter one of the classic problems associated with the ANT project in Maven .... Each jar file you publish will probably need a separate POM. They are not really "additional" artifacts .....
Pretend you donβt need to publish multiple modules .... Use the following build goals to publish your module:
<target name="prepare" description="Generate POM"> <ivy:deliver deliverpattern="${build.dir}/ivy.xml" pubrevision="${publish.revision}" status="release"/> <ivy:makepom ivyfile="${build.dir}/ivy.xml" pomfile="${build.dir}/donaldduck.pom"/> </target> <target name="publish" depends="init,prepare" description="Upload to Nexus"> <ivy:publish resolver="nexus-deploy" pubrevision="${publish.revision}" overwrite="true" publishivy="false" > <artifacts pattern="${build.dir}/[artifact](-[classifier]).[ext]"/> </ivy:publish> </target>
Nexus Credentials
And for completeness, here is the ivysettings.xml file containing the location and credentials of the Nexus repository:
<ivysettings> <settings defaultResolver="nexus-central"/> <credentials host="somehost" realm="Sonatype Nexus Repository Manager" username="????" passwd="????"/> <resolvers> <ibiblio name="nexus-central" root="http://somehost/nexus/content/repositories/central/" m2compatible="true"/> <ibiblio name="nexus-deploy" root="http://somehost/nexus/content/repositories/repo" m2compatible="true"/> </resolvers> </ivysettings>
Update
Artifact Download
To get all published artifacts (and not just the main ones), you need to list them as follows:
<dependency org="com.myspotontheweb" name="donaldduck" rev="1.0.1"> <artifact name="donaldduck" type="txt"/> <artifact name="donaldduck" type="n3" e:classifier="metadata"/> <artifact name="donaldduck" type="zip" e:classifier="distro"/> </dependency>
Functionally the same as the following Maven snippet:
<dependency> <groupId>com.myspotontheweb</groupId> <artifactId>donaldduck</artifactId> <version>1.0.1</version> <type>txt</type> </dependency> <dependency> <groupId>com.myspotontheweb</groupId> <artifactId>donaldduck</artifactId> <version>1.0.1</version> <classifier>metadata</classifier> <type>n3</type> </dependency> <dependency> <groupId>com.myspotontheweb</groupId> <artifactId>donaldduck</artifactId> <version>1.0.1</version> <classifier>distro</classifier> <type>zip</type> </dependency>