我正在生成一个项目站点
mvn site
Linkcheck被激活为报告插件
<reporting>
<plugins>
(...)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-linkcheck-plugin</artifactId>
<version>1.2</version>
</plugin>
</plugins>
</reporting>
该代码使用Java。
类文件的注释头包含指向StackOverflow问题的链接,例如
/**
* Example written by Bruno Lowagie in answer to:
* https://stackoverflow.com/questions/26853894/continue-field-output-on-second-page-with-itextsharp
*/
在网站生成的链接检查阶段,我收到如下警告:
[ WARN] Cookie rejected: "$Version=0; __cfduid=dab443ca4b7fc1de5130856b7401f83cb1455551507; $Path=/; $Domain=.stackoverflow.com". Illegal domain attribute ".stackoverflow.com". Domain of origin: "stackoverflow.com"
[ WARN] Cookie rejected: "$Version=0; logged_in=no; $Path=/; $Domain=.github.com". Illegal domain attribute ".github.com". Domain of origin: "github.com"
我已经看过其他有关“ Cookie被拒绝:非法域名属性”的问题。根据this aswer的说法,问题还不止于此,这是StackOverflow和GitHub设置的Cookie,不允许其发送,而
maven-linkcheck-plugin
的基础http库告诉我。此行为完全由RFC 2109指定。链接的问题提供了一种解决方法:在
httpclient
中设置cookie策略,该策略本质上说,我不在乎不良的cookie,即gimme gimme gimme。我需要容忍不兼容的服务器,因此需要使用cookie guide中描述的浏览器兼容性cookie规范。我的问题是:由于我不是在使用
httpclient
,而是在使用maven
,因此我应该在pom.xml
中放入哪些内容来摆脱这些Cookie警告?我没有发现任何有用的东西maven-linkcheck-plugin documentation
Doxia LinkCheck documentation(Maven插件使用Doxia)
This Doxia JIRA query是有趣的背景信息,但仍然没有Maven解决方案
最佳答案
我也受到这个问题的影响。
您提到的linkcheck文档显示有一个httpClientParameters configuration option。
httpClientParameters:
提取链接时要使用的额外HttpClient参数。例如:
<httpClientParameters>
<property>
<name>http.protocol.max-redirects</name>
<value>10</value>
</property>
</httpClientParameters>
见HttpClient preference page
底部的链接显示
http.protocol.cookie-policy
是HttpClient参数之一。从理论上讲,您可以在pom中执行以下操作来配置基础的httpclient:
<reporting>
<plugin>
<artifactId>maven-linkcheck-plugin</artifactId>
<version>1.2</version>
<configuration>
<httpClientParameters>
<property>
<name>http.protocol.cookie-policy</name>
<value>ignoreCookies</value>
</property>
</httpClientParameters>
</configuration>
</plugin>
</reporting>
其中
ignoreCookies
是CookiePolicy.IGNORE_COOKIES的字符串值。实际上,这是行不通的。如您所述,这里有maven-linkcheck-plugin-> doxia-linkcheck-> httpclient层。调试报告生成后,我可以看到MLP将参数传递到doxia-linkcheck中,但是right about here不幸地发生了。
if ( this.cl == null )
{
initHttpClient();
}
if ( this.http.getHttpClientParameters() != null )
{
for ( Map.Entry<Object, Object> entry : this.http.getHttpClientParameters().entrySet() )
{
if ( entry.getValue() != null )
{
System.setProperty( entry.getKey().toString(), entry.getValue().toString() );
}
}
}
cl
是将发出请求的httpclient,http
是保存在pom中配置的值的bean。不再将它们放在一起,而是将Bean属性转储到系统属性空间中,并且httpclient不在此处。有一个明显的例外,http.protocol.max-redirects
在代码的其他地方得到了特殊的处理,巧合的是maven-linkcheck-plugin文档中使用的示例。因此,看起来该通用功能确实针对特定的东西,而通用用例被忽略了。因此,我们已经用尽了正确配置它的能力,还剩下什么?我们可以使记录器静音。如今,Maven在SLF4J中使用SimpleLogger,但是doxia-linkcheck在log4j 1.2.14中使用了commons-logging。对于我们来说,旧的log4j很难重新配置为外部用户,但是我们可以通过在pluginManagement部分中添加maven‑linkcheck‑plugin并添加桥接依赖项来填充SLF4J:
<pluginManagement>
<plugin>
<artifactId>maven-linkcheck-plugin</artifactId>
<version>1.2</version>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.28</version>
</dependency>
</dependencies>
</plugin>
</pluginManagement>
现在,您可以通过提高相关记录器的日志级别来隐藏警告:
mvn site -Dorg.slf4j.simpleLogger.log.org.apache.commons.httpclient.HttpMethodBase=error
另外,插件中其余的日志现在使用的是maven的日志系统,而不是log4j,因此您可以获得彩色输出和一致的格式。
但是,您可能不想指定该系统属性来在每次生成站点时调整日志。我推荐.mvn/jvm.config文件:
mkdir -p .mvn && cd .mvn
echo "-Dorg.slf4j.simpleLogger.log.org.apache.commons.httpclient.HttpMethodBase=error" >>jvm.config
如果您真的想将其全部保留在pom中,那么还有properties-maven-plugin。
所有这些都是可以在doxia-linkcheck中更好地解决的问题,但是最近还没有看到太多的发展。