Search code examples
mavenjarmaven-plugin

How to ask maven-assembly-plugin to skip (ignore) missing resources and not to stop build?


I am trying to build Metasfresh ERP backend (server-side) suite https://github.com/metasfresh/metasfresh/tree/master/backend and my maven build stops at the project https://github.com/metasfresh/metasfresh/tree/master/backend/de.metas.adempiere.adempiere/migration because of missing resrouces required by the maven-assembly-plugin.

Specifically, the maven log says:

[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.

I checked and the maven-assembly-plugin reads resources from the

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

and it have entry for 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>

but there is no entry at link 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

So - this is very strange thing with this project. Maybe there are some administrative/commercial/organizational issues in this open source project and they are keeping forbidden some necessary files intentionally.

My question is - how can I ask maven plugins to skip missing resources? And just see what is happening?

Maybe I can download maven-metadata.xml, remove the entries for which there are no versions and then hope that maven-assembly-plugin will use local (handcrafted) mave-metadata.xml?


Solution

  • de.metas:metasfresh-assemblies:jar:5.159.1-21669+master's POM contains:

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

    but, as you found, there is no such artifact.

    This is also not a resource (as in src/[main|test]/resources), but a parent POM. You can't "skip" parent POMs, i.e. you can't build child POMs if the parent is not available. This is like trying to compile a sub-class if the super-class isn't available in the classpath.