Domanda

Ho un requisito per creare file jar con Maven, ma devono essere installati nel repository con un " foobar " estensione, e sarebbe bello se potessero avere il proprio tipo di imballo in modo da poter identificare quei manufatti dall'imballo.

Posso impostare un nuovo tipo di imballaggio per farlo?

È stato utile?

Soluzione

Per fare come descritto, crea un progetto Maven con il packaging jar (come indicato qui , poiché non ci saranno definizioni mojo). Nella sottocartella src / main / resources / META-INF / plexus creare un componente.xml con i seguenti contenuti (supponendo che si desideri che il tipo di packaging sia & Quot; my-custom-type & Quot ;, cambiarlo in " foobar " se lo si desidera).

<component-set>
  <components>
    <component>
      <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
      <role-hint>my-custom-type</role-hint>
      <implementation>
        org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping
      </implementation>
      <configuration>
    <phases>
      <!--use the basic jar lifecycle bindings, add additional 
          executions in here if you want anything extra to be run-->          
      <process-resources>
        org.apache.maven.plugins:maven-resources-plugin:resources
      </process-resources>
      <package>
        org.apache.maven.plugins:maven-jar-plugin:jar
      </package>
      <install>
        org.apache.maven.plugins:maven-install-plugin:install
      </install>
      <deploy>
        org.apache.maven.plugins:maven-deploy-plugin:deploy
      </deploy>
    </phases>
      </configuration>
    </component>
    <component>
      <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
      <role-hint>my-custom-type</role-hint>
      <implementation>
        org.apache.maven.artifact.handler.DefaultArtifactHandler
      </implementation>
      <configuration>
        <!--the extension used by Maven in the repository-->
        <extension>foobar</extension>
        <!--the type used when specifying dependencies etc.-->
        <type>my-custom-type</type>
        <!--the packaging used when declaring an implementation of 
          the packaging-->
        <packaging>my-custom-type</packaging>
      </configuration>
    </component>
  </components>
</component-set>

Quindi in un pom che deve avere l'imballaggio personalizzato, dichiarare il tipo richiesto nell'elemento di imballaggio e assicurarsi di aver specificato il plug-in in modo che l'imballaggio personalizzato possa essere fornito. Dichiarando & Lt; extensions & Gt; true & Lt; / extensions & Gt; dice a Maven che il plug-in contribuisce a creare pacchetti e / o gestori dei tipi a Maven.

<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                             http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>name.seller.rich</groupId>
  <artifactId>test</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>my-custom-type</packaging>
  <build>
    <plugins>
      <plugin>
        <groupId>name.seller.rich.maven.plugins</groupId>
        <artifactId>maven-foobar-plugin</artifactId>
        <version>0.0.1</version>
        <!--declare that this plugin contributes the component extensions-->
        <extensions>true</extensions>
      </plugin>
    </plugins>
  </build> 
</project>

Quando il progetto è impacchettato, sarà un jar, con estensione .jar, tuttavia quando viene installato / distribuito, Maven consegnerà il file al repository con il " .foobar " ; estensione come specificato in components.xml

Altri suggerimenti

Seguendo la risposta originale di Rich Seller:

Se come ti consiglia di utilizzare un tipo di imballaggio jar, molto probabilmente nel progetto in cui fai riferimento al tuo plug-in riceverai:

[INFO] ------------------------------------------------------------------------
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] The plugin descriptor for the plugin Plugin [com.ocado.mvn.packaging:Jar-Gem] was not found. Please verify that the plugin JAR /home/ndb/.m2/repository/com/ocado/mvn/packaging/Jar-Gem/1.0.0/Jar-Gem-1.0.0.jar is intact.

Questo perché non esiste alcun descrittore di plugin nel JAR che hai generato.

È possibile utilizzare quanto segue per bypassare l'errore No mojo definitions.. che menziona:

<packaging>maven-plugin</packaging>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-plugin-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
            </configuration>
        </plugin>
    </plugins>
</build>

Questa configurazione è stata trovata nell'esempio dei documenti del plug-in qui .

Il maven-plugin ciclo di vita del tipo di imballaggio ha l'obiettivo plugin:descriptor legato alla fase generate-resources. Questo è specificato nella la documentazione ufficiale di Sonatype .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top