mvn release:perform异常情况以及解决方案

原创  郑建华   2020-04-01   642人阅读  0 条评论

一、返回错误504 Gateway Time out

image.png

错误信息摘录

[INFO] [ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:3.2.0:jar (attach-javadocs) on project nurse
: Execution attach-javadocs of goal org.apache.maven.plugins:maven-javadoc-plugin:3.2.0:jar failed:
 Plugin org.apache.maven.plugins:maven-javadoc-plugin:3.2.0 or one of its dependencies could not be resolved:
 The following artifacts could not be resolved: commons-collections:commons-collections:jar:3.2.2,
 org.apache.httpcomponents:httpclient:jar:4.5.8, org.apache.commons:commons-compress:jar:1.19:
 Could not transfer artifact commons-collections:commons-collections:jar:3.2.2 from/to nexus
 (http://hismaven.trasen.cn/nexus/content/groups/public/): Failed to transfer file:
 http://hismaven.trasen.cn/nexus/content/groups/public/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2.jar. Return code is: 504,
 ReasonPhrase: Gateway Time-out. -> [Help 1]

问题分析:

此处的nexus是通过二级域名反向代理到内网服务器中,使用了nginx

根据网上资料显示504错误可能是如下几种情况


情况一:由于nginx默认的fastcgi进程响应缓冲区太小造成

这种情况下导致fastcgi进程被挂起,如果fastcgi服务队这个挂起处理不是很好的话,就可能提示“504 Gateway Time-out”错误。


情况一解决办法:

默认的fastcgi进程响应的缓冲区是8K,我们可以设置大一点,在nginx.conf里,加入:fastcgi_buffers 8 128k

 这表示设置fastcgi缓冲区为8块128k大小的空间。


情况一解决办法(改进):

 在上述方法修改后,如果还是出现问题,我们可以继续修改nginx的超时参数,将参数调大一点,如设置为60秒:

send_timeout 60;

经过这两个参数的调整,结果没有再提示“504 Gateway Time-out”错误,说明效果还是挺不错的,问题基本解决。


情况二:PHP环境的配置问题

这里我们需要对php-fpm和nginx进行配置修改。因为这种情况下,也会出现“504 Gateway Time-out”错误提示。


情况二解决办法( php-fpm配置修改):

将max_children由之前的10改为30,这样操作是为了保证有充足的php-cgi进程可以被使用。

将request_terminate_timeout由之前的0秒改成60秒,这样使php-cgi进程处理脚本的超时时间提高到60秒,可以防止进程被挂起以提高利用效率。

情况二解决办法(nginx配置修改):

为了减少fastcgi的请求次数,尽量维持buffers不变,我们要更改nginx的几个配置项,如下:

将fastcgi_buffers由4 64k改为2 256k;

将fastcgi_buffer_size 由64k改为128k;

将fastcgi_busy_buffers_size由128k改为256k;

将fastcgi_temp_file_write_size由128k改成256k。


情况二解决办法修改完,我们需要重新加载php-fpm和nginx的配置,然后再进行测试。之后就没有发现“504 Gateway Time-out”错误,效果也还是不错的!


解决方案:

后来重新尝试时,504错误消失,出现其他错误,并未按照上述几种情况进行修改配置(估计按照教程修改也是可以的)


二、打包提示@Param相关错误

错误信息类似下图

image.png

ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.10.4:jar (attach-javadocs) on project StatisticsReport: MavenReportException: Error while generating Javadoc:
[ERROR] Exit code: 1 - D:\Multi-module-project\StatisticsReport\src\main\java\com\yuewen\statistics\report\service\db\PullData.java:29: 警告: @param 没有说明
[ERROR] @param preparedStatement
[ERROR] ^
[ERROR] D:\Multi-module-project\StatisticsReport\src\main\java\com\yuewen\statistics\report\service\db\PullData.java:30: 警告: @param 没有说明
[ERROR] @param params
[ERROR] ^
[ERROR] D:\Multi-module-project\StatisticsReport\src\main\java\com\yuewen\statistics\report\service\db\PullData.java:31: 警告: @return 没有说明
[ERROR] @return

问题分析:

经查得知,在JDK 8中,Javadoc中添加了doclint,而这个工具的主要目的是旨在获得符合W3C HTML 4.01标准规范的HTML文档,在JDK 8中,已经无法获取如下的Javadoc,除非它满足doclint

  • 不能有自关闭的HTML tags,例如<br/>或者<a id="x"/>

  • 不能有未关闭的HTML tags,例如有<ul>而没有</ul>

  • 不能有非法的HTML end tags,例如</br>

  • 不能有非法的HTML attributes,需要符合doclint基于W3C HTML 4.01的实现

  • 不能有重复的HTML id attribute

  • 不能有空的HTML href attribute

  • 不能有不正确的嵌套标题,例如类的文档说明中必须有<h3>而不是<h4>

  • 不能有非法的HTML tags,例如List<String>需要用<>对应的实体符号

  • 不能有损坏的@link references

  • 不能有损坏的@param references,它们必须匹配实际的参数名称

  • 不能有损坏的@throws references,第一个词必须是一个类名称

注意违反这些规则的话,将不会得到Javadoc的输出。

解决方案:

在pom.xml中添加maven-javadoc-plugin配置

<plugin>
			    <groupId>org.apache.maven.plugins</groupId>
			    <artifactId>maven-javadoc-plugin</artifactId>
			    <version>2.8</version>
			    <executions>
			        <execution>
			            <id>attach-javadocs</id>
			            <phase>package</phase>
			            <goals>
			                <goal>jar</goal>
			            </goals>
			            <configuration>
			                <additionalparam>-Xdoclint:none</additionalparam>
			            </configuration>
			        </execution>
			    </executions>
</plugin>


三、提示Failed to execute goal org.apache.maven.plugins:maven-deploy-pluin:2.7:deploy (default-deploy)  Connection reset by peer: socket write error

image.png

错误信息摘录:

 [INFO] [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-pluin:2.7:deploy (default-deploy) on project nurse:
 Failed to deploy artifacts: Cold not transfer artifact com.trasen:nurse:war:1.0.0 from/to nexus-release 
 (http://hismaven.trasen.cn/nexus/content/repositories/releases/): Connection reset by peer: socket write error -> [Help 1]

经查connection reset by peer, socket write error可能的原因大体如下

  1. 服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉;

  2. 客户关掉了浏览器,而服务器还在给客户端发送数据;

  3. 浏览器端按了Stop;

问题分析:

而这个场景使用的是maven发布release版本,最后一步是将war包传到nexus私服的releases仓库中,如图,在失败前最后一步操作是将pom文件传入到releases仓库中。并且查看仓库中也确实传入了pom文件,而后就报错了。接下来应该是传war包,然后就出现了上述错误。则有可能是传war包的请求被截断了。nexus私服没做特殊的设置,那问题就可能出在了nginx上面了,和第一个问题应该差不多。

image.png

image.png

解决方案:

由于我不能直接改到nginx,也联系不上能改nginx的人,并且不能直接找到nginx的配置问题所在,所以,我直接修改了pom.xml文件中的仓库地址,直接使用内网地址,重新尝试打包。

image.png

结果打包成功了,鉴于环境特殊,我决定发布正式版本的使用内网地址,maven依赖的时候切换为外网的域名地址。(其实最好是将nginx配置好,但是环境不在自己掌握中,没办法咯)

本文地址:https://www.zjh336.cn/?id=317
版权声明:本文为原创文章,版权归 郑建华 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?