首页 > 解决方案 > 如何要求 maven-assembly-plugin 跳过(忽略)丢失的资源而不停止构建?

问题描述

我正在尝试构建 Metasfresh ERP 后端(服务器端)套件https://github.com/metasfresh/metasfresh/tree/master/backend我的 maven 构建在项目https://github.com/metasfresh/metasfresh停止/tree/master/backend/de.metas.adempiere.adempiere/migration因为缺少 maven-assembly-plugin 所需的资源。

具体来说,Maven日志说:

[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ de.metas.adempiere.adempiere.migration-sql ---
[INFO] Building jar: C:\Workspace-Brugere\metasfresh\backend\de.metas.adempiere.adempiere\migration\target\de.metas.adempiere.adempiere.migration-sql-10.0.0.jar
[INFO]
[INFO] --- maven-assembly-plugin:3.0.0:single (make-postgresql-assembly) @ de.metas.adempiere.adempiere.migration-sql ---
Downloading: https://repository.apache.org/snapshots/de/metas/metasfresh-assemblies/maven-metadata.xml
Downloading: https://repo.metasfresh.com/repository/mvn-master/de/metas/metasfresh-assemblies/maven-metadata.xml
Downloaded: https://repo.metasfresh.com/repository/mvn-master/de/metas/metasfresh-assemblies/maven-metadata.xml (8.7 kB at 5.5 kB/s)
Downloading: https://repo.metasfresh.com/repository/mvn-master/de/metas/de.metas.parent.general/5.159.1-21669+master/de.metas.parent.general-5.159.1-21669+master.pom
Downloading: https://repo.metasfresh.com/repository/mvn-master/de/metas/de.metas.parent.general/5.159.1-21672+master/de.metas.parent.general-5.159.1-21672+master.pom
Downloading: https://repo.metasfresh.com/repository/mvn-master/de/metas/de.metas.parent.general/5.159.1-21673+master/de.metas.parent.general-5.159.1-21673+master.pom
...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] de.metas.parent .................................... SUCCESS [  2.944 s]
...
[INFO] de.metas.monitoring ................................ SUCCESS [ 10.034 s]
[INFO] de.metas.adempiere.adempiere.patched-ecs ........... SUCCESS [ 13.617 s]
[INFO] de.metas.adempiere.adempiere.migration-sql ......... FAILURE [ 36.118 s]
[INFO] metasfresh-report .................................. SKIPPED
...
[INFO] metasfresh-dist-dist ............................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 04:36 min
[INFO] Finished at: 2020-12-25T19:01:04+02:00
[INFO] Final Memory: 146M/1207M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:3.0.0:single (make-postgresql-assembly)
  on project de.metas.adempiere.adempiere.migration-sql:
  Execution make-postgresql-assembly of goal org.apache.maven.plugins:maven-assembly-plugin:3.0.0:single failed:
  Plugin org.apache.maven.plugins:maven-assembly-plugin:3.0.0 or one of its dependencies could not be resolved:
  Failed to collect dependencies at org.apache.maven.plugins:maven-assembly-plugin:jar:3.0.0 ->
  de.metas:metasfresh-assemblies:jar:5.159.1-21669+master:
  Failed to read artifact descriptor for de.metas:metasfresh-assemblies:jar:5.159.1-21669+master:
  Could not find artifact de.metas:de.metas.parent.general:pom:5.159.1-21669+master in metasfresh-repo
  (https://repo.metasfresh.com/repository/mvn-master/) -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.

我检查了,maven-assembly-plugin 从

https://repo.metasfresh.com/repository/mvn-master/de/metas/metasfresh-assemblies/maven-metadata.xml

它有 5.1159.1-21669+master 的条目:

<version>5.159.1-21667+master</version>
<version>5.159.1-21668+master</version>
<version>5.159.1-21669+master</version>
<version>5.159.1-21670+master</version>
<version>5.159.1-21671+master</version>
<version>5.159.1-21672+master</version>
<version>5.159.1-21673+master</version>
<version>5.159.1-21674+master</version>

但链接https://repo.metasfresh.com/repository/mvn-master/de/metas/de.metas.parent.general/5.159.1-21669+master/de.metas.parent.general没有条目-5.159.1-21669+master.pom

所以 - 这个项目很奇怪。也许这个开源项目中存在一些行政/商业/组织问题,他们故意保留禁止一些必要的文件。

我的问题是 - 我怎样才能让 maven 插件跳过丢失的资源?看看发生了什么?

也许我可以下载 maven-metadata.xml,删除没有版本的条目,然后希望 maven-assembly-plugin 使用本地(手工制作的)mave-metadata.xml?

标签: mavenjarmaven-plugin

解决方案


de.metas:metasfresh-assemblies:jar:5.159.1-21669+master的 POM 包含:

  ...
  <parent>
    <groupId>de.metas</groupId>
    <artifactId>de.metas.parent.general</artifactId>
    <version>5.159.1-21669+master</version>
    ...
  </parent>
  ...

但是,正如您发现的那样,没有这样的工件

也不是资源(如 中src/[main|test]/resources),而是父 POM。您不能“跳过”父 POM,即如果父 POM 不可用,您就无法构建子 POM。如果超类在类路径中不可用,这就像尝试编译子类一样。


推荐阅读