Предупреждение maven-linkcheck-plugin при проверке ссылки: cookie отклонен, недопустимый атрибут домена
Я создаю сайт проекта с
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.
Заголовок комментария к файлам классов содержит ссылки, например, на вопросы Stackru
/**
* Example written by Bruno Lowagie in answer to:
* https://stackru.com/questions/26853894/continue-field-output-on-second-page-with-itextsharp
*/
На этапе проверки ссылок при создании сайта я получаю следующие предупреждения:
[ WARN] Cookie rejected: "$Version=0; __cfduid=dab443ca4b7fc1de5130856b7401f83cb1455551507; $Path=/; $Domain=.stackru.com". Illegal domain attribute ".stackru.com". Domain of origin: "stackru.com"
[ WARN] Cookie rejected: "$Version=0; logged_in=no; $Path=/; $Domain=.github.com". Illegal domain attribute ".github.com". Domain of origin: "github.com"
Я уже посмотрел некоторые другие вопросы о "Отклонено Cookie: недопустимый атрибут домена". Согласно этому ответу, проблема не в моем конце, это Stackru и GitHub, которые устанавливают cookie, которые им не разрешено отправлять, и базовую библиотеку http maven-linkcheck-plugin
говорит мне это. Это поведение точно так, как указано в RFC 2109.
Связанный вопрос дает обходной путь: установите политику cookie в httpclient
это, по сути, говорит, что я не забочусь о плохом печенье, дай мне дай мне дай мне. Мне нужен допуск для несовместимых серверов, поэтому мне нужно использовать спецификацию cookie совместимости браузера, как описано в руководстве по cookie.
Мой вопрос: так как я не работаю с httpclient
но с maven
что я положу в pom.xml
избавиться от этих предупреждений cookie? Я не нашел ничего полезного в
- документация по плагину maven-linkcheck
- Документация Doxia LinkCheck (плагин Maven использует Doxia)
- Этот запрос Doxia JIRA представляет интерес для чтения в качестве справочной информации, но все еще не является решением Maven.
0 ответов
Меня тоже затронула эта проблема.
Упомянутая вами документация по проверке ссылок показывает, что существует опция конфигурации httpClientParameters.
httpClientParameters:
Дополнительные параметры HttpClient, которые будут использоваться при получении ссылок. Например:
<httpClientParameters> <property> <name>http.protocol.max-redirects</name> <value>10</value> </property> </httpClientParameters>
Эта ссылка внизу показывает 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, но прямо здесь происходит что-то прискорбное.
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
- это bean-компонент, содержащий значения, которые были настроены в pom. Вместо того, чтобы собирать их вместе, свойства bean-компонента просто выгружаются в пространство системных свойств, и httpclient не смотрит туда. Есть заметное исключение,http.protocol.max-redirects
получает специальную обработку в другом месте кода, и по совпадению это пример, использованный в документации maven ‑ linkcheck ‑ plugin. Таким образом, похоже, что эта общая функция действительно была нацелена на что-то конкретное, а общий вариант использования был проигнорирован.
Итак, мы исчерпали свои возможности по правильной настройке, что осталось? Мы можем заглушить регистратор. В настоящее время Maven использует SLF4J с SimpleLogger, но doxia-linkcheck использует общее ведение журнала с log4j 1.2.14. Нам непросто перенастроить старый log4j в качестве внешнего пользователя, но мы можем использовать SLF4J, добавив maven ‑ linkcheck ‑ plugin в раздел pluginManagement и добавив мостовую зависимость:
<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, но в последнее время он не получил большого развития.