Skip to content
This repository was archived by the owner on Dec 4, 2024. It is now read-only.
This repository was archived by the owner on Dec 4, 2024. It is now read-only.

Merging removes elements from intermediate XML #4

Closed
@rhuss

Description

@rhuss

I have the case where I have two implementations DockerComposeConfigHandler and PropertyConfigHandler of the same role ExternalConfigHandler which I want to injects into a List field of another component. All three components are annotated with @Component and the plexus-component-metadata plugin is used to (a) generate the components.xml from these annotated files and (b) merged it with a static components.xml (which defines some lifecycles).

Whereas the generation into the intermediat XML in target/components.xml works as expected, after merging in the static XML into target/classes/META-INF/plexus/components.xml one of the two components to inject is missing (DockerComposeConfigHandler in this case).

Here are the three files

Static components.xml

<component-set>
  <components>
    <!-- Lifecycle for a build + integration test -->
    <component>
      <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
      <role-hint>docker</role-hint>
      <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
      <configuration>
        <lifecycles>
          <lifecycle>
            <id>default</id>
            <!--
            phase mappings extend from jar mappings
            http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Default_Lifecycle_Bindings_-_Packaging_ejb__ejb3__jar__par__rar__war
            -->
            <phases>
              <process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
              <compile>org.apache.maven.plugins:maven-compiler-plugin:compile</compile>
              <process-test-resources>org.apache.maven.plugins:maven-resources-plugin:testResources</process-test-resources>
              <test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile>
              <test>org.apache.maven.plugins:maven-surefire-plugin:test</test>
              <package>org.apache.maven.plugins:maven-jar-plugin:jar,io.fabric8:docker-maven-plugin:build</package>
              <pre-integration-test>io.fabric8:docker-maven-plugin:start</pre-integration-test>
              <integration-test>org.apache.maven.plugins:maven-failsafe-plugin:integration-test</integration-test>
              <verify>io.fabric8:docker-maven-plugin:stop,org.apache.maven.plugins:maven-failsafe-plugin:verify</verify>
              <deploy>io.fabric8:docker-maven-plugin:push</deploy>
            </phases>
          </lifecycle>
        </lifecycles>
      </configuration>
    </component>
    <!-- Lifecycle for a pure docker Build build -->
    <component>
      <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
      <role-hint>docker-build</role-hint>
      <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
      <configuration>
        <lifecycles>
          <lifecycle>
            <id>default</id>
            <phases>
              <process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
              <compile>org.apache.maven.plugins:maven-compiler-plugin:compile</compile>
              <process-test-resources>org.apache.maven.plugins:maven-resources-plugin:testResources</process-test-resources>
              <test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile>
              <test>org.apache.maven.plugins:maven-surefire-plugin:test</test>
              <package>org.apache.maven.plugins:maven-jar-plugin:jar,io.fabric8:docker-maven-plugin:build</package>
              <deploy>io.fabric8:docker-maven-plugin:push</deploy>
            </phases>
          </lifecycle>
        </lifecycles>
      </configuration>
    </component>
    <component>
      <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
      <role-hint>docker-tar</role-hint>
      <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
      <configuration>
        <lifecycles>
          <lifecycle>
            <id>default</id>
            <phases>
              <process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
              <compile>org.apache.maven.plugins:maven-compiler-plugin:compile</compile>
              <process-test-resources>org.apache.maven.plugins:maven-resources-plugin:testResources</process-test-resources>
              <test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile>
              <test>org.apache.maven.plugins:maven-surefire-plugin:test</test>
              <package>org.apache.maven.plugins:maven-jar-plugin:jar,io.fabric8:docker-maven-plugin:source</package>
              <install>org.apache.maven.plugins:maven-install-plugin:install</install>
            </phases>
          </lifecycle>
        </lifecycles>
      </configuration>
    </component>
  </components>
</component-set>

Intermediate components.xml

<component-set>
  <components>
    <component>
      <role>io.fabric8.maven.docker.assembly.DockerAssemblyManager</role>
      <role-hint>default</role-hint>
      <implementation>io.fabric8.maven.docker.assembly.DockerAssemblyManager</implementation>
      <instantiation-strategy>per-lookup</instantiation-strategy>
      <description></description>
      <isolated-realm>false</isolated-realm>
      <requirements>
        <requirement>
          <role>org.apache.maven.plugin.assembly.archive.AssemblyArchiver</role>
          <role-hint></role-hint>
          <field-name>assemblyArchiver</field-name>
        </requirement>
        <requirement>
          <role>org.apache.maven.plugin.assembly.io.AssemblyReader</role>
          <role-hint></role-hint>
          <field-name>assemblyReader</field-name>
        </requirement>
        <requirement>
          <role>org.codehaus.plexus.archiver.manager.ArchiverManager</role>
          <role-hint></role-hint>
          <field-name>archiverManager</field-name>
        </requirement>
        <requirement>
          <role>org.codehaus.plexus.archiver.Archiver</role>
          <role-hint>track</role-hint>
          <field-name>trackArchiver</field-name>
        </requirement>
      </requirements>
    </component>
    <component>
      <role>org.codehaus.plexus.archiver.Archiver</role>
      <role-hint>track</role-hint>
      <implementation>io.fabric8.maven.docker.assembly.MappingTrackArchiver</implementation>
      <instantiation-strategy>singleton</instantiation-strategy>
      <description></description>
      <isolated-realm>false</isolated-realm>
    </component>
    <component>
      <role>io.fabric8.maven.docker.config.handler.ExternalConfigHandler</role>
      <role-hint>default</role-hint>
      <implementation>io.fabric8.maven.docker.config.handler.compose.DockerComposeConfigHandler</implementation>
      <description></description>
      <isolated-realm>false</isolated-realm>
    </component>
    <component>
      <role>io.fabric8.maven.docker.config.handler.ImageConfigResolver</role>
      <role-hint>default</role-hint>
      <implementation>io.fabric8.maven.docker.config.handler.ImageConfigResolver</implementation>
      <instantiation-strategy>per-lookup</instantiation-strategy>
      <description></description>
      <isolated-realm>false</isolated-realm>
      <requirements>
        <requirement>
          <role>io.fabric8.maven.docker.config.handler.ExternalConfigHandler</role>
          <field-name>handlers</field-name>
        </requirement>
      </requirements>
    </component>
    <component>
      <role>io.fabric8.maven.docker.config.handler.ExternalConfigHandler</role>
      <role-hint>default</role-hint>
      <implementation>io.fabric8.maven.docker.config.handler.property.PropertyConfigHandler</implementation>
      <description></description>
      <isolated-realm>false</isolated-realm>
    </component>
    <component>
      <role>io.fabric8.maven.docker.service.ServiceHubFactory</role>
      <role-hint>default</role-hint>
      <implementation>io.fabric8.maven.docker.service.ServiceHubFactory</implementation>
      <instantiation-strategy>singleton</instantiation-strategy>
      <description></description>
      <isolated-realm>false</isolated-realm>
      <requirements>
        <requirement>
          <role>org.apache.maven.plugin.BuildPluginManager</role>
          <role-hint></role-hint>
          <field-name>pluginManager</field-name>
        </requirement>
        <requirement>
          <role>io.fabric8.maven.docker.assembly.DockerAssemblyManager</role>
          <role-hint></role-hint>
          <field-name>dockerAssemblyManager</field-name>
        </requirement>
      </requirements>
    </component>
  </components>
</component-set>

Merged components.xml (missing one handler)

<?xml version="1.0" encoding="UTF-8"?>
<component-set>
  <components>

    <component>
      <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
      <role-hint>docker</role-hint>
      <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
      <configuration>
        <lifecycles>
          <lifecycle>
            <id>default</id>

            <phases>
              <process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
              <compile>org.apache.maven.plugins:maven-compiler-plugin:compile</compile>
              <process-test-resources>org.apache.maven.plugins:maven-resources-plugin:testResources</process-test-resources>
              <test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile>
              <test>org.apache.maven.plugins:maven-surefire-plugin:test</test>
              <package>org.apache.maven.plugins:maven-jar-plugin:jar,io.fabric8:docker-maven-plugin:build</package>
              <pre-integration-test>io.fabric8:docker-maven-plugin:start</pre-integration-test>
              <integration-test>org.apache.maven.plugins:maven-failsafe-plugin:integration-test</integration-test>
              <verify>io.fabric8:docker-maven-plugin:stop,org.apache.maven.plugins:maven-failsafe-plugin:verify</verify>
              <deploy>io.fabric8:docker-maven-plugin:push</deploy>
            </phases>
          </lifecycle>
        </lifecycles>
      </configuration>
    </component>

    <component>
      <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
      <role-hint>docker-build</role-hint>
      <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
      <configuration>
        <lifecycles>
          <lifecycle>
            <id>default</id>
            <phases>
              <process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
              <compile>org.apache.maven.plugins:maven-compiler-plugin:compile</compile>
              <process-test-resources>org.apache.maven.plugins:maven-resources-plugin:testResources</process-test-resources>
              <test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile>
              <test>org.apache.maven.plugins:maven-surefire-plugin:test</test>
              <package>org.apache.maven.plugins:maven-jar-plugin:jar,io.fabric8:docker-maven-plugin:build</package>
              <deploy>io.fabric8:docker-maven-plugin:push</deploy>
            </phases>
          </lifecycle>
        </lifecycles>
      </configuration>
    </component>
    <component>
      <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
      <role-hint>docker-tar</role-hint>
      <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
      <configuration>
        <lifecycles>
          <lifecycle>
            <id>default</id>
            <phases>
              <process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
              <compile>org.apache.maven.plugins:maven-compiler-plugin:compile</compile>
              <process-test-resources>org.apache.maven.plugins:maven-resources-plugin:testResources</process-test-resources>
              <test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile>
              <test>org.apache.maven.plugins:maven-surefire-plugin:test</test>
              <package>org.apache.maven.plugins:maven-jar-plugin:jar,io.fabric8:docker-maven-plugin:source</package>
              <install>org.apache.maven.plugins:maven-install-plugin:install</install>
            </phases>
          </lifecycle>
        </lifecycles>
      </configuration>
    </component>
  <component>
      <role>io.fabric8.maven.docker.assembly.DockerAssemblyManager</role>
      <role-hint>default</role-hint>
      <implementation>io.fabric8.maven.docker.assembly.DockerAssemblyManager</implementation>
      <instantiation-strategy>per-lookup</instantiation-strategy>
      <description />
      <isolated-realm>false</isolated-realm>
      <requirements>
        <requirement>
          <role>org.apache.maven.plugin.assembly.archive.AssemblyArchiver</role>
          <role-hint />
          <field-name>assemblyArchiver</field-name>
        </requirement>
        <requirement>
          <role>org.apache.maven.plugin.assembly.io.AssemblyReader</role>
          <role-hint />
          <field-name>assemblyReader</field-name>
        </requirement>
        <requirement>
          <role>org.codehaus.plexus.archiver.manager.ArchiverManager</role>
          <role-hint />
          <field-name>archiverManager</field-name>
        </requirement>
        <requirement>
          <role>org.codehaus.plexus.archiver.Archiver</role>
          <role-hint>track</role-hint>
          <field-name>trackArchiver</field-name>
        </requirement>
      </requirements>
    </component><component>
      <role>org.codehaus.plexus.archiver.Archiver</role>
      <role-hint>track</role-hint>
      <implementation>io.fabric8.maven.docker.assembly.MappingTrackArchiver</implementation>
      <instantiation-strategy>singleton</instantiation-strategy>
      <description />
      <isolated-realm>false</isolated-realm>
    </component><component>
      <role>io.fabric8.maven.docker.config.handler.ExternalConfigHandler</role>
      <role-hint>default</role-hint>
      <implementation>io.fabric8.maven.docker.config.handler.property.PropertyConfigHandler</implementation>
      <description />
      <isolated-realm>false</isolated-realm>
    </component><component>
      <role>io.fabric8.maven.docker.config.handler.ImageConfigResolver</role>
      <role-hint>default</role-hint>
      <implementation>io.fabric8.maven.docker.config.handler.ImageConfigResolver</implementation>
      <instantiation-strategy>per-lookup</instantiation-strategy>
      <description />
      <isolated-realm>false</isolated-realm>
      <requirements>
        <requirement>
          <role>io.fabric8.maven.docker.config.handler.ExternalConfigHandler</role>
          <field-name>handlers</field-name>
        </requirement>
      </requirements>
    </component><component>
      <role>io.fabric8.maven.docker.service.ServiceHubFactory</role>
      <role-hint>default</role-hint>
      <implementation>io.fabric8.maven.docker.service.ServiceHubFactory</implementation>
      <instantiation-strategy>singleton</instantiation-strategy>
      <description />
      <isolated-realm>false</isolated-realm>
      <requirements>
        <requirement>
          <role>org.apache.maven.plugin.BuildPluginManager</role>
          <role-hint />
          <field-name>pluginManager</field-name>
        </requirement>
        <requirement>
          <role>io.fabric8.maven.docker.assembly.DockerAssemblyManager</role>
          <role-hint />
          <field-name>dockerAssemblyManager</field-name>
        </requirement>
      </requirements>
    </component></components>
</component-set>

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions