I'm trying to use ivy:publish to publish a jar that I've built to the .ivy repository, but I'm getting an error. I'm pretty sure I'm not using it correctly, so I was hoping someone could point me in the right direction.
The project structure is something like this:
root--|
|--src
|--build
| |
| |--someorganisation-commonlib-1.0.0.jar
|
|--ivy.xml
|--build.xml
The build.xml looks something like this:
<target name="publish">
<ivy-publish organisation="someorganisation" resolver="local" module="commonlib" revision="1.0.0">
<artifacts pattern="build/[organisation]-[module](-[revision])(-[type]).[ext]" />
</ivy-publish>
</target>
ivy.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<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="someorganisation"
module="commonlib"
status="integration">
</info>
<dependencies>
<dependency org="com.thoughtworks.xstream" name="xstream" rev="1.3.1" transitive="false"/>
<dependency org="org.slf4j" name="slf4j-api" rev="1.6.1" transitive="false"/>
<dependency org="org.slf4j" name="slf4j-jdk14" rev="1.6.1" transitive="false"/>
<dependency org="joda-time" name="joda-time" rev="1.6.2" transitive="false"/>
</dependencies>
</ivy-module>
When I run the build.xml, I get the following error:
C:\workspaces\wkspc\someproject\build.xml:8: someorganization#commonlib;1.0.0: java.lang.IllegalStateException: ivy file not found in cache for someorganization#commonlib;1.0.0: please resolve dependencies before delivering (C:\Documents and Settings\someuser\.ivy2\cache\resolved-someorganization-commonlib-1.0.0.xml)
You've forgotten a publications section in your ivy file.
<ivy-module version="2.0">
<info organisation="someorganisation" module="commonlib"/>
<publications>
<artifact name="commonlib" type="jar"/>
</publications>
<dependencies>
<dependency org="com.thoughtworks.xstream" name="xstream" rev="1.3.1" transitive="false"/>
<dependency org="org.slf4j" name="slf4j-api" rev="1.6.1" transitive="false"/>
<dependency org="org.slf4j" name="slf4j-jdk14" rev="1.6.1" transitive="false"/>
<dependency org="joda-time" name="joda-time" rev="1.6.2" transitive="false"/>
</dependencies>
</ivy-module>
The status and revision (pubrevision) fields can be specified by the publish task as follows:
<ivy:publish resolver="${publish.resolver}" pubrevision="${publish.revision}" status="${publish.status}">
<artifacts pattern="${build.dir}/[organisation]-[artifact].[ext]"/>
</ivy:publish>
Note 1:
It would be simpler to generate the jar file without the revision number in the name. Just let ivy's artifact pattern pick up the jar file.
Note 2:
You will require an ivy resolve at some stage in your build, otherwise the ivy file doesn't get processed.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With