Maven 3.5.2无法将工件部署到Artifactory,错误417

时间:2018-02-13 07:08:17

标签: apache maven artifactory

我正在创建简单的pom项目,如下所示: -

<project xmlns="http://maven.apache.org/POM/4.0.0"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                        http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.test</groupId>
    <artifactId>test-maven</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>test-maven</name>
    <distributionManagement>
        <repository>
            <id>central</id>
            <name>myartifactory</name>
            <url>
               https://myhost/artifactory/libs-release-local
            </url>
        </repository>
        <snapshotRepository>
            <id>snapshots</id>
            <name>myartifactory</name>
            <url>
               https://myhost/artifactory/libs-snapshot-local
            </url>
        </snapshotRepository>
    </distributionManagement>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

settings.xml

<servers>
    <server>
        <id>central</id>
        <username>my-user-id</username>
        <password>some-encrypyted-password</password>
    </server>
    <server>
        <id>snapshots</id>
        <username>my-user-id</username>
        <password>some-encrypyted-password</password>
    </server>
</servers>

使用Artifactory 5.8.3Maven 3.3.9可以将此项目部署到mvn clean deploy

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T23:41:47+07:00)
Maven home: C:\Java.Application\Apache\apache-maven-3.3.9\bin\..
Java version: 1.8.0_121, vendor: Oracle Corporation
Java home: C:\Java.Application\Sun\Java\jdk1.8.0_121\jre
Default locale: en_US, platform encoding: UTF-8
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"

但是当我改为Maven 3.5.2

Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T14:58:13+07:00)
Maven home: C:\Java.Application\Apache\apache-maven-3.5.2\bin\..
Java version: 1.8.0_121, vendor: Oracle Corporation
Java home: C:\Java.Application\Sun\Java\jdk1.8.0_121\jre
Default locale: en_US, platform encoding: UTF-8
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

在执行mvn clean deploy期间出现错误

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy 
(default-deploy) on project test-maven: Failed to deploy artifacts: 
Could not transfer artifact com.test:test-maven:pom:0.0.1-20180213.064245-2 from/to 
snapshots (https://myhost/artifactory/libs-snapshot-local): Failed to transfer file: 
https://myhost/artifactory/libs-snapshot-local/com/test/test-maven/
0.0.1-SNAPSHOT/test-maven-0.0.1-20180213.064245-2.pom. 
Return code is: 417, ReasonPhrase: Expectation Failed. -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: 
    Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy 
    (default-deploy) on project test-maven: 
    Failed to deploy artifacts: Could not transfer artifact...
    .../0.0.1-SNAPSHOT/test-maven-0.0.1-20180213.064245-2.pom. 
    Return code is: 417, ReasonPhrase: Expectation Failed.
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:213)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)

我做错了吗?你能帮忙建议吗?

编辑1

  1. 当时artifactory.log没有任何日志打印。

  2. request.log

  3. 20180213162947|1|REQUEST|some-ip|non_authenticated_user|GET|/libs-snapshot-local/com/test/test-maven/0.0.1-SNAPSHOT/maven-metadata.xml|HTTP/1.0|401|0
    20180213162947|193|REQUEST|some-ip|my-user|GET|/libs-snapshot-local/com/test/test-maven/0.0.1-SNAPSHOT/maven-metadata.xml|HTTP/1.0|200|605
    20180213162947|3|REQUEST|some-ip|my-user|GET|/libs-snapshot-local/com/test/test-maven/0.0.1-SNAPSHOT/maven-metadata.xml.sha1|HTTP/1.0|200|40
    
    1. access.log
    2. 2018-02-13 16:29:47,347 [ACCEPTED DOWNLOAD] libs-snapshot-local:com/test/test-maven/0.0.1-SNAPSHOT/maven-metadata.xml for my-user/some-ip.
      2018-02-13 16:29:47,437 [ACCEPTED DOWNLOAD] libs-snapshot-local:com/test/test-maven/0.0.1-SNAPSHOT/maven-metadata.xml.sha1 for my-user/some-ip.
      

      编辑2

      mvn clean deploy -e -X日志

      [INFO] 
      [INFO] --- maven-deploy-plugin:2.8.2:deploy (default-deploy) @ test-maven ---
      [DEBUG] Dependency collection stats: {ConflictMarker.analyzeTime=129185, ConflictMarker.markTime=69136, ConflictMarker.nodeCount=36, ConflictIdSorter.graphTime=58074, ConflictIdSorter.topsortTime=20149, ConflictIdSorter.conflictIdCount=16, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=960001, ConflictResolver.conflictItemCount=36, DefaultDependencyCollector.collectTime=76597424, DefaultDependencyCollector.transformTime=1258668}
      [DEBUG] org.apache.maven.plugins:maven-deploy-plugin:jar:2.8.2:
      [DEBUG]    org.apache.maven:maven-plugin-api:jar:2.2.1:compile
      [DEBUG]    org.apache.maven:maven-project:jar:2.2.1:compile
      [DEBUG]       org.apache.maven:maven-settings:jar:2.2.1:compile
      [DEBUG]       org.apache.maven:maven-profile:jar:2.2.1:compile
      [DEBUG]       org.apache.maven:maven-artifact-manager:jar:2.2.1:compile
      [DEBUG]          org.apache.maven:maven-repository-metadata:jar:2.2.1:compile
      [DEBUG]          backport-util-concurrent:backport-util-concurrent:jar:3.1:compile
      [DEBUG]       org.apache.maven:maven-plugin-registry:jar:2.2.1:compile
      [DEBUG]       org.codehaus.plexus:plexus-interpolation:jar:1.11:compile
      [DEBUG]       org.codehaus.plexus:plexus-container-default:jar:1.0-alpha-9-stable-1:compile
      [DEBUG]          junit:junit:jar:3.8.1:compile
      [DEBUG]          classworlds:classworlds:jar:1.1-alpha-2:compile
      [DEBUG]    org.apache.maven:maven-model:jar:2.2.1:compile
      [DEBUG]    org.apache.maven:maven-artifact:jar:2.2.1:compile
      [DEBUG]    org.codehaus.plexus:plexus-utils:jar:3.0.15:compile
      [DEBUG] Created new class realm plugin>org.apache.maven.plugins:maven-deploy-plugin:2.8.2
      [DEBUG] Importing foreign packages into class realm plugin>org.apache.maven.plugins:maven-deploy-plugin:2.8.2
      [DEBUG]   Imported:  < maven.api
      [DEBUG] Populating class realm plugin>org.apache.maven.plugins:maven-deploy-plugin:2.8.2
      [DEBUG]   Included: org.apache.maven.plugins:maven-deploy-plugin:jar:2.8.2
      [DEBUG]   Included: backport-util-concurrent:backport-util-concurrent:jar:3.1
      [DEBUG]   Included: org.codehaus.plexus:plexus-interpolation:jar:1.11
      [DEBUG]   Included: junit:junit:jar:3.8.1
      [DEBUG]   Included: org.codehaus.plexus:plexus-utils:jar:3.0.15
      [DEBUG] Configuring mojo org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-deploy-plugin:2.8.2, parent: sun.misc.Launcher$AppClassLoader@55f96302]
      [DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy' with basic configurator -->
      [DEBUG]   (f) artifact = com.test:test-maven:pom:0.0.1-SNAPSHOT
      [DEBUG]   (f) attachedArtifacts = []
      [DEBUG]   (f) deployAtEnd = false
      [DEBUG]   (s) localRepository =       id: local
            url: file:///D:/M2/Repository/
         layout: default
      snapshots: [enabled => true, update => always]
       releases: [enabled => true, update => always]
      
      [DEBUG]   (f) offline = false
      [DEBUG]   (f) packaging = pom
      [DEBUG]   (f) pomFile = D:\JavaPrj\sample\test-maven\pom.xml
      [DEBUG]   (f) project = MavenProject: com.test:test-maven:0.0.1-SNAPSHOT @ D:\JavaPrj\sample\test-maven\pom.xml
      [DEBUG]   (f) reactorProjects = [MavenProject: com.test:test-maven:0.0.1-SNAPSHOT @ D:\JavaPrj\sample\test-maven\pom.xml]
      [DEBUG]   (f) retryFailedDeploymentCount = 1
      [DEBUG]   (f) skip = false
      [DEBUG]   (f) updateReleaseInfo = false
      [DEBUG] -- end configuration --
      [DEBUG] Using transporter WagonTransporter with priority -1.0 for https://myhost/artifactory/libs-snapshot-local
      [DEBUG] Using connector BasicRepositoryConnector with priority 0.0 for https://myhost/artifactory/libs-snapshot-local with username=my-user, password=***
      Downloading from snapshots: https://myhost/artifactory/libs-snapshot-local/com/test/test-maven/0.0.1-SNAPSHOT/maven-metadata.xml
      Progress (1): maven-metadata.xml (605 B)
      
      Downloaded from snapshots: https://myhost/artifactory/libs-snapshot-local/com/test/test-maven/0.0.1-SNAPSHOT/maven-metadata.xml (605 B at 961 B/s)
      [DEBUG] Writing tracking file D:\M2\Repository\com\test\test-maven\0.0.1-SNAPSHOT\resolver-status.properties
      Uploading to snapshots: https://myhost/artifactory/libs-snapshot-local/com/test/test-maven/0.0.1-SNAPSHOT/test-maven-0.0.1-20180213.092946-2.pom
      [INFO] ------------------------------------------------------------------------
      [INFO] BUILD FAILURE
      [INFO] ------------------------------------------------------------------------
      [INFO] Total time: 2.018 s
      [INFO] Finished at: 2018-02-13T16:29:46+07:00
      [INFO] Final Memory: 11M/162M
      [INFO] ------------------------------------------------------------------------
      

      编辑3

      添加Apache httpd access_log

      my-ip - - [13/Feb/2018:17:40:48 +0700] "GET /artifactory/libs-snapshot-local/com/test/test-maven/0.0.1-SNAPSHOT/maven-metadata.xml HTTP/1.1" 401 91
      my-ip - - [13/Feb/2018:17:40:48 +0700] "GET /artifactory/libs-snapshot-local/com/test/test-maven/0.0.1-SNAPSHOT/maven-metadata.xml HTTP/1.1" 200 605
      my-ip - - [13/Feb/2018:17:40:48 +0700] "GET /artifactory/libs-snapshot-local/com/test/test-maven/0.0.1-SNAPSHOT/maven-metadata.xml.sha1 HTTP/1.1" 200 40
      my-ip - - [13/Feb/2018:17:40:48 +0700] "PUT /artifactory/libs-snapshot-local/com/test/test-maven/0.0.1-SNAPSHOT/test-maven-0.0.1-20180213.104048-2.pom HTTP/1.1" 417 364
      

      编辑4

      关于Configuring a Reverse Proxy,此生成不适用于Artifactory OSS版本。

      1. 这是我的Apache httpd设置。
      2. <Location /artifactory/>
        
          ProxyPass https://myhost:62443/artifactory/
          ProxyPassReverse https://myhost/artifactory/
          SetEnv force-proxy-request-1.0 1
          SetEnv proxy-nokeepalive 1
        </Location>
        
        1. artifactory/tomcat/conf/server.xml
        2. <Server port="8015" shutdown="SHUTDOWN">
          
              <Service name="Catalina">
                  <!--Connector port="8081" sendReasonPhrase="true"/-->
                  <!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
                  <Connector
                     protocol="org.apache.coyote.http11.Http11NioProtocol"
                     port="62443" maxThreads="200" URIEncoding="UTF-8" 
                     scheme="https" secure="true" SSLEnabled="true"
                     keystoreFile="/path/to/jks" keystorePass="some-password"
                     clientAuth="false" sslProtocol="TLS"/>
          
                  <!-- Must be at least the value of artifactory.access.client.max.connections -->
                  <Connector port="8040" sendReasonPhrase="true" maxThreads="50"/>
          
                  <!-- This is the optional AJP connector -->
                  <Connector port="8019" protocol="AJP/1.3" sendReasonPhrase="true"/>
          
                  <Engine name="Catalina" defaultHost="localhost">
                      <Host name="localhost" appBase="webapps" startStopThreads="2"/>
                  </Engine>
              </Service>
          
          </Server>
          

          编辑5

          我想强调一些重要内容如下: -

          1. 使用Maven 3.3.9针对现有Artifactory部署此项目并Apache httpd工作正常。如果我错了,请纠正我。我知道配置没有任何问题。

          2. 唯一的变化是Maven 3.5.2

          3. 我不知道为什么会出现这个问题。

            编辑6

            由于wagon

            存在例外情况
            Caused by: org.apache.maven.wagon.TransferFailedException: 
            Failed to transfer file: https://myhost/artifactory/libs-snapshot-local/com/test/test-maven/0.0.1-SNAPSHOT/test-maven-0.0.1-20180214.065633-7.pom. Return code is: 417, ReasonPhrase: Expectation Failed.
                at org.apache.maven.wagon.shared.http.AbstractHttpClientWagon.put (AbstractHttpClientWagon.java:635)
                at org.apache.maven.wagon.shared.http.AbstractHttpClientWagon.put (AbstractHttpClientWagon.java:557)
                at org.apache.maven.wagon.shared.http.AbstractHttpClientWagon.put (AbstractHttpClientWagon.java:539)
                at org.apache.maven.wagon.shared.http.AbstractHttpClientWagon.put (AbstractHttpClientWagon.java:533)
                at org.apache.maven.wagon.shared.http.AbstractHttpClientWagon.put (AbstractHttpClientWagon.java:513)
            

            我比较了Maven wagonmaven_home/lib之间的3.3.9 3.5.2,发现3.3.9使用了wagon version 2.10和{ {1}}使用3.5.2

            尝试1

            我将wagon 2.12从Maven maven_home/lib复制到Maven 3.3.93.5.2正常工作。

            尝试2

            mvn clean deploy从Maven maven_home/lib复制到Maven 3.5.2,会发生同样的异常。

            尝试3

            我正在更新3.3.9以使用最新的pom,如下所示: -

            wagon 3.0.0

            幸运的是,当我对<properties> <my.wagon.vesion>3.0.0</my.wagon.vesion> </properties> <build> <extensions> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-file</artifactId> <version>${my.wagon.vesion}</version> </extension> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-http-shared</artifactId> <version>${my.wagon.vesion}</version> </extension> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-http</artifactId> <version>${my.wagon.vesion}</version> </extension> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-provider-api</artifactId> <version>${my.wagon.vesion}</version> </extension> </extensions> </build> 执行mvn clean deploy -e -X时,有一个wagon 3.0.0打印,因此我找到了回复

            HTTP header/request/response

            然后我谷歌了[DEBUG] http-outgoing-0 << "<h1>Expectation Failed</h1>[\n]" [DEBUG] http-outgoing-0 << "<p>The expectation given in the Expect request-header[\n]" [DEBUG] http-outgoing-0 << "field could not be met by this server.[\n]" [DEBUG] http-outgoing-0 << "The client sent<pre>[\n]" [DEBUG] http-outgoing-0 << " Expect: 100-continue[\n]" [DEBUG] http-outgoing-0 << "</pre>[\n]" [DEBUG] http-outgoing-0 << "</p><p>Only the 100-continue expectation is supported.</p>[\n]" [DEBUG] http-outgoing-0 << "</body></html>[\n]" [DEBUG] http-outgoing-0 << HTTP/1.1 417 Expectation Failed 一词,发现StackOverflow中的一些重要内容:Apache and mod_proxy not handling HTTP 100-continue from client HTTP 417

            尝试4

            我将Only the 100-continue expectation is supported.设置为上面提到的帖子。

            httpd.conf

            目前我可以正确使用<IfModule mod_headers.c> RequestHeader unset Expect early </IfModule> 执行mvn clean deploy

2 个答案:

答案 0 :(得分:3)

由于根本原因是

[DEBUG] http-outgoing-0 << "<h1>Expectation Failed</h1>[\n]"
[DEBUG] http-outgoing-0 << "<p>The expectation given in the Expect request-header[\n]"
[DEBUG] http-outgoing-0 << "field could not be met by this server.[\n]"
[DEBUG] http-outgoing-0 << "The client sent<pre>[\n]"
[DEBUG] http-outgoing-0 << "    Expect: 100-continue[\n]"
[DEBUG] http-outgoing-0 << "</pre>[\n]"
[DEBUG] http-outgoing-0 << "</p><p>Only the 100-continue expectation is supported.</p>[\n]"
[DEBUG] http-outgoing-0 << "</body></html>[\n]"
[DEBUG] http-outgoing-0 << HTTP/1.1 417 Expectation Failed

StackOverflow answer建议通过将Apache Expect设置为

来删除httpd.conf标头
<IfModule mod_headers.c>
    RequestHeader unset Expect early
</IfModule>

目前我可以正确使用mvn clean deploy执行Maven 3.5.2

答案 1 :(得分:1)

如果无法解决当前问题,可以尝试其他部署机制,如maven Artifactory插件或从CI部署。在Artifactory的一篇博客文章中,建议从Jenkins(或非云环境中的其他CI)部署到获取更清洁的pom.xml。 https://www.jfrog.com/confluence/display/RTF/Maven+Artifactory+Plugin https://jfrog.com/blog/dont-let-maven-deploy-plugin-trip-you/