【问题标题】:PUT operations to URL failed with status code 405: Method Not Allowed : Ivy Remote publishing对 URL 的 PUT 操作失败,状态码为 405:不允许方法:常春藤远程发布
【发布时间】:2014-02-22 14:17:05
【问题描述】:

尝试将工件发布到远程存储库时出现以下错误。

构建失败 /home/kannan/.jenkins/workspace/projectA/build.xml:87: 无法为 com.mycompany#projectA 发布工件;1.0: java.io.IOException: PUT 操作到 URL http://myserver.com/repository /com.mycompany/projectA/1.0/ivy-1.0.xml 失败,状态码为 405:方法不允许 在 org.apache.ivy.util.url.AbstractURLHandler.validatePutStatusCode(AbstractURLHandler.java:82) 在 org.apache.ivy.util.url.BasicURLHandler.upload(BasicURLHandler.java:264) 在 org.apache.ivy.util.url.URLHandlerDispatcher.upload(URLHandlerDispatcher.java:82) 在 org.apache.ivy.util.FileUtil.copy(FileUtil.java:150) 在 org.apache.ivy.plugins.repository.url.URLRepository.put(URLRepository.java:84) 在 org.apache.ivy.plugins.repository.AbstractRepository.put(AbstractRepository.java:130) 在 org.apache.ivy.plugins.resolver.RepositoryResolver.put(RepositoryResolver.java:234) 在 org.apache.ivy.plugins.resolver.RepositoryResolver.publish(RepositoryResolver.java:216) 在 org.apache.ivy.core.publish.PublishEngine.publish(PublishEngine.java:275) 在 org.apache.ivy.core.publish.PublishEngine.publish(PublishEngine.java:254) 在 org.apache.ivy.core.publish.PublishEngine.publish(PublishEngine.java:166) 在 org.apache.ivy.Ivy.publish(Ivy.java:615) 在 org.apache.ivy.ant.IvyPublish.doExecute(IvyPublish.java:312) 在 org.apache.ivy.ant.IvyTask.execute(IvyTask.java:277) 在 org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291) 在 sun.reflect.GeneratedMethodAccessor4.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 在 org.apache.tools.ant.Task.perform(Task.java:348) 在 org.apache.tools.ant.Target.execute(Target.java:390) 在 org.apache.tools.ant.Target.performTasks(Target.java:411) 在 org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399) 在 org.apache.tools.ant.Project.executeTarget(Project.java:1368) 在 org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 在 org.apache.tools.ant.Project.executeTargets(Project.java:1251) 在 org.apache.tools.ant.Main.runBuild(Main.java:809) 在 org.apache.tools.ant.Main.startAnt(Main.java:217) 在 org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) 在 org.apache.tools.ant.launch.Launcher.main(Launcher.java:109) 无法发布工件; 对 URL http://myserver.com/repository/com.mycompany/projectA/1.0/ivy-1.0.xml 的 PUT 操作失败,状态码为 405:不允许方法

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>

构建.xml

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

【问题讨论】:

    标签: publish ivy put


    【解决方案1】:

    我在尝试发布到 Artifactory 时遇到了同样的错误消息。原来我忘记在 URL 中包含端口 8081。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        ivy 设置应该改变 build-server 属性

        <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>
        

        【讨论】:

          猜你喜欢
          • 2019-03-05
          • 2020-04-29
          • 1970-01-01
          • 2010-09-26
          • 2023-03-23
          • 2020-12-15
          • 1970-01-01
          • 1970-01-01
          • 2020-06-17
          相关资源
          最近更新 更多