我正在创建简单的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.3
:Maven 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)
我做错了吗?你能帮忙建议吗?
当时artifactory.log
没有任何日志打印。
request.log
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
access.log
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.
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] ------------------------------------------------------------------------
添加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
关于Configuring a Reverse Proxy,此生成不适用于Artifactory OSS版本。
Apache httpd
设置。<Location /artifactory/>
ProxyPass https://myhost:62443/artifactory/
ProxyPassReverse https://myhost/artifactory/
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
</Location>
artifactory/tomcat/conf/server.xml
<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>
我想强调一些重要内容如下: -
使用Maven 3.3.9
针对现有Artifactory
部署此项目并Apache httpd
工作正常。如果我错了,请纠正我。我知道配置没有任何问题。
唯一的变化是Maven 3.5.2
。
我不知道为什么会出现这个问题。
由于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 wagon
和maven_home/lib
之间的3.3.9
3.5.2
,发现3.3.9
使用了wagon version 2.10
和{ {1}}使用3.5.2
。
我将wagon 2.12
从Maven maven_home/lib
复制到Maven 3.3.9
,3.5.2
正常工作。
将mvn clean deploy
从Maven maven_home/lib
复制到Maven 3.5.2
,会发生同样的异常。
我正在更新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。
我将Only the 100-continue expectation is supported.
设置为上面提到的帖子。
httpd.conf
目前我可以正确使用<IfModule mod_headers.c>
RequestHeader unset Expect early
</IfModule>
执行mvn clean deploy
。
答案 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/