一、返回错误504 Gateway Time out
错误信息摘录
[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相关错误
错误信息类似下图
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
错误信息摘录:
[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可能的原因大体如下
服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉;
客户关掉了浏览器,而服务器还在给客户端发送数据;
浏览器端按了Stop;
问题分析:
而这个场景使用的是maven发布release版本,最后一步是将war包传到nexus私服的releases仓库中,如图,在失败前最后一步操作是将pom文件传入到releases仓库中。并且查看仓库中也确实传入了pom文件,而后就报错了。接下来应该是传war包,然后就出现了上述错误。则有可能是传war包的请求被截断了。nexus私服没做特殊的设置,那问题就可能出在了nginx上面了,和第一个问题应该差不多。
解决方案:
由于我不能直接改到nginx,也联系不上能改nginx的人,并且不能直接找到nginx的配置问题所在,所以,我直接修改了pom.xml文件中的仓库地址,直接使用内网地址,重新尝试打包。
结果打包成功了,鉴于环境特殊,我决定发布正式版本的使用内网地址,maven依赖的时候切换为外网的域名地址。(其实最好是将nginx配置好,但是环境不在自己掌握中,没办法咯)
还没有评论,来说两句吧...