对URL的PUT操作失败,状态码为405:Method Not Allowed:Ivy Remote publishing

时间:2014-01-30 10:24:57

标签: publish ivy put

尝试将工件发布到远程存储库时,我收到以下错误。

BUILD FAILED
/home/kannan/.jenkins/workspace/projectA/build.xml:87: impossible to publish artifacts for com.mycompany#projectA;1.0: java.io.IOException: PUT operation to URL http://myserver.com/repository/com.mycompany/projectA/1.0/ivy-1.0.xml failed with status code 405: Method Not Allowed
        at org.apache.ivy.util.url.AbstractURLHandler.validatePutStatusCode(AbstractURLHandler.java:82)
        at org.apache.ivy.util.url.BasicURLHandler.upload(BasicURLHandler.java:264)
        at org.apache.ivy.util.url.URLHandlerDispatcher.upload(URLHandlerDispatcher.java:82)
        at org.apache.ivy.util.FileUtil.copy(FileUtil.java:150)
        at org.apache.ivy.plugins.repository.url.URLRepository.put(URLRepository.java:84)
        at org.apache.ivy.plugins.repository.AbstractRepository.put(AbstractRepository.java:130)
        at org.apache.ivy.plugins.resolver.RepositoryResolver.put(RepositoryResolver.java:234)
        at org.apache.ivy.plugins.resolver.RepositoryResolver.publish(RepositoryResolver.java:216)
        at org.apache.ivy.core.publish.PublishEngine.publish(PublishEngine.java:275)
        at org.apache.ivy.core.publish.PublishEngine.publish(PublishEngine.java:254)
        at org.apache.ivy.core.publish.PublishEngine.publish(PublishEngine.java:166)
        at org.apache.ivy.Ivy.publish(Ivy.java:615)
        at org.apache.ivy.ant.IvyPublish.doExecute(IvyPublish.java:312)
        at org.apache.ivy.ant.IvyTask.execute(IvyTask.java:277)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
        at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.Target.execute(Target.java:390)
        at org.apache.tools.ant.Target.performTasks(Target.java:411)
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
        at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
        at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
        at org.apache.tools.ant.Main.runBuild(Main.java:809)
        at org.apache.tools.ant.Main.startAnt(Main.java:217)
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)

impossible to publish artifacts; 

PUT operation to URL http://myserver.com/repository/com.mycompany/projectA/1.0/ivy-1.0.xml failed with status code 405: Method Not Allowed

的ivy.xml

<ivy-module version="2.0">  
    <info organisation="com.mycompany" module="projectA" revision="${version}">  
        <description>  
            This project provides interface to projectA.
        </description>  
    </info>
    <publications>
    <artifact />
    </publications>
    <dependencies defaultconfmapping="*->*,!sources,!javadoc">     
        <dependency org="com.hazelcast" name="hazelcast-client" rev="2.5" transitive="false"/>
        <dependency org="com.hazelcast" name="hazelcast" rev="3.1.5" transitive="false"/>
        <dependency org="log4j" name="log4j" rev="1.2.16" transitive="false"/>
    </dependencies>    
</ivy-module>

ivysettings.xml

<ivysettings>
    <settings defaultResolver="defaultresolver" />
    <property name="ibiblio-maven2-root" value="http://repo1.maven.org/maven2/" />
    <property name="build-server" value="http://myserver.com/repository" />
    <resolvers>
        <chain name="defaultresolver">
        <ibiblio name="local" m2compatible="true" root="${build-server}" />
            <url name="repository">
               <ivy pattern="${build-server}/[organisation]/[module]/[revision]/ivy-[revision].xml" />
               <artifact pattern="${build-server}/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
            </url>   
        </chain>
    </resolvers>
</ivysettings>

的build.xml

<ivy:publish artifactspattern="${build.dir}/[artifact].[ext]" 
             resolver="repository" organisation="com.mycompany"
         module="projectA" pubrevision="${version}" status="release" conf="java" />

3 个答案:

答案 0 :(得分:2)

我尝试发布到Artifactory时遇到同样的错误消息。事实证明我忘记在URL中包含端口8081。

答案 1 :(得分:1)

你的HTTP服务器是什么?你使用Artifactory之类的东西吗?

如果您使用的是Apache,则默认情况下会禁用PUT操作(对于大多数Web服务器可能相同)。您必须启用它并关联后端脚本以按预期处理查询(从查询中检索工件并将其保存在文件系统上)。

我使用PHP启用它,你可以从我的GitHub存储库中看到它:https://github.com/opatry/ivy-frontend

答案 2 :(得分:0)

如果您使用Artifactory作为您的存储库,请查看:

http://www.jfrog.com/confluence/display/RTF2X/Working+with+Ivy

常春藤设置应该更改构建服务器属性

<ivysettings>
<settings defaultResolver="defaultresolver" />
<property name="ibiblio-maven2-root" value="http://repo1.maven.org/maven2/" />
<property name="build-server" value="http://myserver.com/repository/libs-snapshot-local/" />
<resolvers>
    <chain name="defaultresolver">
    <ibiblio name="local" m2compatible="true" root="${build-server}" />
        <url name="repository">
           <ivy pattern="${build-server}/[organisation]/[module]/[revision]/ivy-[revision].xml" />
           <artifact pattern="${build-server}/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
        </url>   
    </chain>
</resolvers>
</ivysettings>