Domanda

Ho artefatti che vengono creati e rilasciati utilizzando Maven.Il pom.xml originale dell'artefatto contiene le solite informazioni sul progetto (artifactId, nome, ecc.) e le dipendenze.Va bene.Ma pom.xml include anche informazioni private come gli URL SCM, i nomi degli sviluppatori o un artefatto principale.

Esiste un modo per dire a Maven di generare un pom.xml che sia disinfettato, in modo che l'artefatto possa essere rilasciato al pubblico, senza distruggere le informazioni tecniche rilevanti come le dipendenze?

Né gli URL SCM, né l'elenco degli sviluppatori né l'esistenza di un parent-pom (che viene utilizzato solo per le definizioni DepMgmt e altri meta-materiali) sono rilevanti per gli utenti dell'artefatto, quindi presumo che potrei essere rimosso da un rilasciato pom.xml

Il pom.xml sia in un gestore di repository come Archiva che confezionato nel file jar dell'artefatto contiene queste informazioni.Presumo che Maven stia semplicemente copiando tutto.

Riassumere:

Io ho:

<project>
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.example</groupId>
   <artifactId>my-artifact</artifactId>
    <scm>
        <connection>scm:svn:http://buildmachine/org.example/my-artifact/trunk</connection>
        <developerConnection>scm:svn:http://buildmachine/org.example/my-artifact/trunk</developerConnection>
        <url>http://buildmachine/org.example/my-artifact/trunk</url>
    </scm>
    <dependencies>
        <dependency>
            ...
        </dependency>
    </dependencies>

Voglio:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.example</groupId>
    <artifactId>my-artifact</artifactId>
    <dependencies>
        <dependency>
            ...
        </dependency>
    </dependencies>
È stato utile?

Soluzione

Non conosco una soluzione perfetta per il tuo problema, ma alcune cose possono essere fatte. Questi sono hack, ma potrebbero aiutare.
Innanzitutto, esternalizzare le informazioni private da POM (come SCM, nomi degli sviluppatori ecc.). Per i metadati SCM sarà:

<scm>
   <connection>${my.scm.connection}</connection>
   <developerConnection>${my.scm.developerConnection}</developerConnection>   
   <url>${my.scm.url}</url>
</scm>

Secondo, sposta le proprietà a File Impostazioni posizionandoli in un profilo. Nel file delle impostazioni è anche possibile "nascondere" il repository privato della tua azienda. Se è necessario condividere profili/impostazioni.xml con altri soci, prova a utilizzare il file di impostazione globale in esecuzione mvn -gs path_to_global_settings o preparare l'installazione di Maven comune con queste impostazioni preparate.
Sfortunatamente la sezione POM genitore deve rimanere intatta.

Altri suggerimenti

Il plug-in di rilascio non ha un supporto integrato per questo, per quanto ne sappia. Mi vengono in mente due possibilità:

Opzione 1:

  • Non includere il pom nei tuoi barattoli: puoi controllarlo usando il parametro "archivio" al barattolo obiettivo. <archive><addMavenDescriptor>false</addMavenDescriptor></archive>
  • Scrivi un programma per eliminare gli elementi che non desideri nel tuo POM pubblicato. Dovresti farlo tra la versione: Prepara e rilascio: Esegui, che probabilmente funzionerebbe solo se hai un supporto nel tuo SCM per la modifica dei tag dopo la creazione, o eseguire la modifica in un diverso tag/ramo e quindi rilasciare: eseguire da là.

Penso che l'opzione 1 sia schifosa.

Opzione 2:

  • Prova a sfruttare il parametro di preparazione al plug -in di rilascio. Se riesci a scrivere la manipolazione POM come azioni Maven, esso potrebbe Sii possibile farlo in questo modo.

Penso che l'opzione 2 sia più difficile.

Se nulla di tutto ciò funziona, probabilmente dovrai usare qualcosa come il rilascio: stage e fare la disinfettante a mano, ma vorresti comunque escludere i POM dal contenuto del barattolo.

Creeresti il ​​tuo archetipo per questo e lo rilasceresti al pubblico.I tuoi utenti potrebbero quindi recuperare l'archetipo e impostare il proprio progetto basato sul tuo archetipo.

Un archetipo è un plugin molto semplice, che contiene il prototipo del progetto che si desidera creare.

Per creare un nuovo progetto basato su un archetipo è necessario chiamare mvn archetype:generate obiettivo, come il seguente:

  mvn archetype:generate                              \
  -DarchetypeGroupId=<archetype-groupId>              \
  -DarchetypeArtifactId=<archetype-artifactId>        \ 
  -DarchetypeVersion=<archetype-version>              \
  -DgroupId=<my.groupid>                              \
  -DartifactId=<my-artifactId>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top