2

在使用 maven 构建项目期间,我在更新其父项目的版本后遇到了生成 javadoc 的问题。

2016-08-18 16:06:44.559 [INFO] <<< maven-javadoc-plugin:2.10.3:aggregate < generate-sources @ org.eclipse.scout.rt <<<
2016-08-18 16:06:44.560 [DEBUG] building maven31 dependency graph for org.eclipse.scout.rt:org.eclipse.scout.rt:pom:6.0.0-SNAPSHOT with Maven31DependencyGraphBuilder
2016-08-18 16:06:44.560 [DEBUG] Dependency collection stats: {ConflictMarker.analyzeTime=0, ConflictMarker.markTime=0, ConflictMarker.nodeCount=1, ConflictIdSorter.graphTime=0, ConflictIdSorter.topsortTime=0, ConflictIdSorter.conflictIdCount=0, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=0, ConflictResolver.conflictItemCount=0, DefaultDependencyCollector.collectTime=0, DefaultDependencyCollector.transformTime=0}
2016-08-18 16:06:44.561 [DEBUG] org.eclipse.scout.rt:org.eclipse.scout.rt:pom:6.0.0-SNAPSHOT
2016-08-18 16:06:44.636 [DEBUG]  canGenerateReport = true for project MavenProject: org.eclipse.scout.rt:org.eclipse.scout.rt:6.0.0-SNAPSHOT @ /home/<REDACTED>/workspace/org.eclipse.scout.rt.branch-6.0_nightly-sitedocs/org.eclipse.scout.rt/pom.xml
2016-08-18 16:06:44.662 [DEBUG] Computing decoration model of org.eclipse.scout.rt:org.eclipse.scout.rt:pom:6.0.0-SNAPSHOT for locale en
2016-08-18 16:06:44.662 [DEBUG] No site descriptor found for org.eclipse.scout.rt:org.eclipse.scout.rt:pom:6.0.0-SNAPSHOT
2016-08-18 16:06:44.663 [DEBUG] Looking for site descriptor of level 1 parent project: org.eclipse.scout:maven_rt_plugin_config-master:pom:2.0.7
2016-08-18 16:06:44.665 [DEBUG] Using transporter WagonTransporter with priority -1.0 for <REDACTED>
2016-08-18 16:06:44.666 [DEBUG] Using connector BasicRepositoryConnector with priority 0.0 for <REDACTED>
2016-08-18 16:06:44.666 [INFO] Downloading: <REDACTED>/org/eclipse/scout/maven_rt_plugin_config-master/2.0.7/maven_rt_plugin_config-master-2.0.7-site_en.xml
2016-08-18 16:06:45.289 [DEBUG] Writing tracking file /home/<REDACTED>/workspace/org.eclipse.scout.rt.branch-6.0_nightly-sitedocs/.repository/org/eclipse/scout/maven_rt_plugin_config-master/2.0.7/maven_rt_plugin_config-master-2.0.7-site_en.xml.lastUpdated
2016-08-18 16:06:45.597 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-site-plugin:3.5.1:site (default-cli) on project org.eclipse.scout.rt: SiteToolException: The site descriptor cannot be resolved from the repository: ArtifactResolutionException: Unable to locate site descriptor: Could not transfer artifact org.eclipse.scout:maven_rt_plugin_config-master:xml:site_en:2.0.7 from/to AAA.libs.release (<REDACTED>): Access denied to: <REDACTED>/org/eclipse/scout/maven_rt_plugin_config-master/2.0.7/maven_rt_plugin_config-master-2.0.7-site_en.xml , ReasonPhrase:Forbidden.
2016-08-18 16:06:45.598 [ERROR] org.eclipse.scout:maven_rt_plugin_config-master:xml:2.0.7
2016-08-18 16:06:45.598 [ERROR] 
2016-08-18 16:06:45.598 [ERROR] from the specified remote repositories:
2016-08-18 16:06:45.598 [ERROR] AAA.libs.release (<REDACTED>, releases=true, snapshots=false),
2016-08-18 16:06:45.599 [ERROR] AAA.libs.snapshots (<REDACTED>, releases=false, snapshots=true),
2016-08-18 16:06:45.599 [ERROR] eclipse.release (https://repo.eclipse.org/content/groups/releases/, releases=true, snapshots=false),
2016-08-18 16:06:45.599 [ERROR] eclipse.snapshot (https://repo.eclipse.org/content/groups/snapshots/, releases=true, snapshots=true),
2016-08-18 16:06:45.599 [ERROR] remote-repos (<REDACTED>, releases=true, snapshots=false)

如您所见,它尝试下载实际上不存在的 maven_rt_plugin_config-master-2.0.7-site_en .xml 然而,确实存在这样一个没有 _en 后缀的 xml...

据我所知,我没有指定任何语言环境,并且与站点或 javadoc 生成相关的父项目似乎没有任何变化。

为什么 Maven 不回退到默认语言环境?

4

4 回答 4

3

如果这可能有助于其他人试图弄清楚为什么 maven 正在搜索父项目site.xmlsite_en.xml从父项目中搜索并且当希望只是使用默认设置时失败:

在使用 SpringBoot 时遇到了类似的问题。mvn clean site尝试spring-boot-starter-parent:xml:site_en:1.4.0.RELEASE从中央(https://repo.maven.apache.org/maven2)转移失败:

repo.maven.apache.org:443 repo.maven.apache.org/xxxx 失败:连接超时:连接

当项目配置为使用公司存储库时会发生这种情况,但在使用 maven central direct 时不会发生。似乎在公司存储库到位后,该请求被代理为安全请求。对中央的安全请求因“超时”而失败,构建失败。如果请求不安全,则将从中央返回“未找到”,并且 maven 将继续使用默认设置。所以在这种情况下,404 会很好(根据需要继续使用默认值)其他错误代码不好(构建失败)。

有几种方法可以解决这个问题:

  • 将文件安装到本地存储库(hack)
  • 公司回购服务器上的配置更改(可能是真正的修复,与接受的答案中描述的相同)
  • settings.xml在 maven文件中配置代理设置

这是settings.xml代理配置的示例:

<proxy>
    <active>true</active>
    <protocol>http</protocol>
    <host>my.corporate.proxy</host>
    <port>myPort</port>
    <nonProxyHosts>*.my.corporate.domain|*.my.subsidiary.domain</nonProxyHosts>
</proxy>
于 2016-09-07T22:14:34.913 回答
2

导致站点插件跳过查找丢失文件的解决方法是创建您自己的site.xml站点描述符,并将combine.self属性设置为override

<project name="Your-Service" combine.self="override">
    ...
</project>

该文件应位于src/site/site.xml

于 2019-08-09T12:23:00.790 回答
2

这个问题的原因是我们的存储库(JFrog Artifactory)的行为:请求的存储库是一个虚拟存储库,它聚合了几个物理存储库。

如果在用户有权访问的存储库中找不到请求的工件,并且存在用户无权访问的其他工件,它会回复 403(禁止)。然后 Maven 似乎停止在同一存储库中寻找替代文件。

存在要求JFrog Artifactory 更改行为的功能请求,但(在撰写本文时)没有人在处理它。

我们的解决方案是更改 settings.xml 以直接指向存储库。然后,Maven 将收到英语语言环境版本 (site_en.xml) 的 404(未找到),并正确回退到默认的 site.xml。当出现 403 时,其他几个 Maven 插件也会出现此问题。

于 2016-08-19T07:12:15.377 回答
1

正如其他答案中所讨论的,这似乎发生在尝试查找文件site_en.xmlsite.xml与远程存储库中的父级关联的网络问题时。看起来如果服务器返回 404(未找到)那么一切都很好,但如果 HTTP 请求返回其他内容,则子构建中止。如果您有多个远程存储库,这可能是一个特殊的问题,因为它只需要一个失败,子构建就会失败。

如果您可以控制父项目,则可以使用一种解决方法 - 您可以在父 pom 旁边发布虚拟文件,因此客户端构建不再依赖于获取 404。但是您需要发布子构建正在寻找的两个文件,而不仅仅是一个.

发布一个文件很容易,但同时发布这两个文件有点麻烦。要释放这两个文件,请在具有以下配置site:attach-descriptor的父级中使用:pom.xml

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-site-plugin</artifactId>
  <executions>
    <execution>
      <id>attach-descriptor</id>
      <goals>
        <goal>attach-descriptor</goal>
      </goals>
      <configuration>
        <locales>en,de</locales>
      </configuration>
    </execution>
  </executions>
</plugin>

hack是locales配置。这en会导致site_en.xml文件附加到构建并发布。de尝试查找site_de.xml不存在的 ,因此代码改为回退site.xml。请注意,这de是一个随机选择的语言环境,但实际存在,即。xx不起作用。

实际文件应与 parent 一起添加pom.xml。父项目的结构应该是:

- pom.xml
- src
  - site
    - site.xml
    - site_en.xml

这是一个适用于src/site/site_en.xml和的虚拟文件src/site/site.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="Parent-Site">
</project>

PS。目标不是继承的attach-descriptor,所以这个配置不会影响子构建。

于 2018-08-18T20:28:51.313 回答