2014-04-01 94 views
0

我在我的项目使用Ant +常春藤+ Artifactory的,我尝试发布我自己的仓库,而我的build.xml是这样的:Artifactory的+常春藤缺少神器org.apache

<?xml version="1.0" encoding="UTF-8"?> 
<project name="hello-world-ant" basedir="." default="main" xmlns:ivy="antlib:org.apache.ivy.ant"> 
<!-- Ant properties --> 
<property name="src.dir"  value="src"/> 
<property name="lib.dir"  value="lib"/> 
<property name="build.dir" value="build"/> 
<property name="classes.dir" value="${build.dir}/classes"/> 
<property name="jar.dir"  value="${build.dir}/jar"/> 
<property name="main-class" value="com.eureka.HelloWorld"/> 

<ivy:settings file="./ivysettings.xml" /> 

<target name="clean"> 
    <delete dir="${build.dir}"/> 
    <delete dir="${lib.dir}"/> 
</target> 

<target name="resolve"> 
    <ivy:retrieve/> 
</target>  

<target name="report" depends="resolve"> 
    <ivy:report todir="${build.dir}"/> 
</target> 

<target name="compile" depends="report"> 
    <mkdir dir="${classes.dir}"/> 
    <javac srcdir="${src.dir}" destdir="${classes.dir}"/> 
</target> 

<target name="jar" depends="compile"> 
    <mkdir dir="${jar.dir}"/> 
    <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}"> 
    <manifest> 
     <attribute name="Main-Class" value="${main-class}"/> 
    </manifest> 
    </jar> 
</target> 

<target name="run" depends="jar"> 
    <java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/> 
</target> 

<target name="ivy"> 
     <ivy:resolve /> 

     <!-- Possible ivy:report, ivy:retrieve and other 
     elements for managing your dependencies go here --> 

     <ivy:deliver conf="*(public)"/> 
    </target> 

    <target name="publish" depends="jar"> 
    <ivy:retrieve/> 
     <ivy:publish resolver="publish" overwrite="true" artifactspattern="${jar.dir}/[artifact].[ext]" /> 
    </target> 

    <target name="clean-build" depends="clean,jar"/> 

    <target name="main" depends="clean,run"/> 

</project> 

和我ivysettings .XML是这样的:

<credentials host="localhost" realm="Artifactory Realm" username="admin" passwd="password" /> 

<resolvers> 
<chain name="main"> 
    <ibiblio name="artifactory" m2compatible="true" root="http://localhost:8081/artifactory/libs-releases" /> 
    <url name="publish"> 
    <!-- You can use m2compatible="true" instead of specifying your own pattern --> 
    <ivy pattern="http://localhost:8081/artifactory/test-snapshot-local/[organization]/[module]/[revision]/ivy-[revision].xml" /> 
    <artifact pattern="http://localhost:8081/artifactory/test-snapshot-local/[organization]/[module]/[revision]/[artifact].[ext]"/> 
    </url> 
</chain> 

当我做ant是没有问题的,但是当我做ant publish这说明了什么问题:

BUILD FAILED 
/Users/stage/Documents/workspace/test_ivy/build.xml:56: impossible to publish artifacts for org.apache#hello-ivy;[email protected]: java.io.IOException: missing artifact org.apache#hello-ivy;20140401102841!hello-ivy.jar 

我在使用这些工具的新的,我想知道这里发生了什么......非常感谢〜

回答

3

假设你正在使用的常春藤快速入门教程中提到的HELLO-常春藤例子,在ivy.xml中定义的模块是hello-ivy而您使用的项目名称是hello-world-ant
用于发布的artifactspattern${jar.dir}/[artifact].[ext]这意味着Ivy将在寻找hello-ivy.jar的同时创建一个名为hello-world-ant.jar${ant.project.name}.jar)的jar。
将模块ivy.xml更改为“hello-world-ant”将解决此问题。

+0

这真的是我需要的。感谢您宝贵的解决方案。 –