Domanda

Ho dieci GUERRA file, che sono quasi identici, il codice di markup.L'unica differenza sta nelle immagini, CSS e Messaggi.Mi ha colpito il concetto di Profili, ma non ho ancora groked ancora e non sono sicuro se questo è in grado di gestire quello che ho bisogno di fare.

Fondamentalmente, io voglio un progetto di base con diversi profili per il 10 diverse Guerre.Ogni volta che una generazione è iniziato con un determinato profilo, va a un repository locale o dell'organizzazione) e recupera il CSS, immagini e messaggi, file e li colloca nel punto corretto, prima di terminare il processo.Non riesco a immaginare questo è molto diverso che andare fuori e di recupero di un file JAR e di metterlo in WEB-INF lib.

Sono sicuro che questo non è TROPPO lontano fuori nel campo a sinistra e voglio stick per Maven sweet spot, per quanto possibile.Qualsiasi aiuto sarebbe apprezzato!

È stato utile?

Soluzione

Se si desidera mantenere ciascuno dei progetti separati, si può dare ogni progetto la propria pom.xml. In ogni pom progetto figlio, aggiungere una dipendenza per il progetto principale. Questo farà sì che la costruzione di fare un "overlay", in cui vengono aggiunti i file dal progetto figlio (o sovrascrivere i file in) progetto principale. Esempio di dipendenza per progetto figlio:

<dependency>
   <groupId>com.example.app</groupId>
   <artifactId>example</artifactId>
   <version>1.0.0</version>
   <type>war</type>
</dependency>

Altri suggerimenti

mi viene in mente di soluzioni basate sui profili, il plugin di guerra Maven e filtraggio come descritto nella Aggiunta e Web Filtering esterni liberi di risorse .

Ma questo non risponde alla come utilizzare le risorse web come "dipendenze" parte della tua domanda.

Per questo, il Come condividere le risorse attraverso progetti Maven post sul blog descrive qualcosa di molto vicino e potrebbe aiutare.

Profili dovrebbe essere una buona misura per questo.Secondo le informazioni di cui la build di maven profilo docs questo non dovrebbe lavorare.In particolare, dicono

build as specified inside of a profile is not a full implementation of the traditional
build POM element. This build is really another class in the model - from which the POM
build is derived - and only allows the plugins and pluginManagement subelements when 
defined here. This sidesteps any issues with secondary validation after the pom.xml is 
parsed in this case.

Ma ho appena provato e le risorse adeguate, includendo una build elemento con risorse definizione all'interno.

Nel pom, si desidera includere un profilo per ogni webapps.Per esempio, nel mio test, ho fatto la seguente:

<profile>
    <id>abc</id>
    <activation>
        <activeByDefault>false</activeByDefault>
    </activation>
    <build>
        <resources>
            <resource>
                <directory>abc</directory>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
        </resources>
    </build>
</profile>
<profile>
    <id>xyz</id>
    <activation>
        <activeByDefault>false</activeByDefault>
    </activation>
    <build>
        <resources>
            <resource>
                <directory>xyz</directory>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
        </resources>
    </build>
</profile>

Poi, ho avuto una directory abc contenente un file abc.proprietà, e un altro xyz con un corrispondente xyz.file di proprietà.

Per tutte le risorse condivise, si avrebbe un elemento che ha anche un elemento che include tutti quelli che si desidera per essere utilizzato in ogni webapp.

Infine, quando si genera specificare il profilo della webapp che si vorrebbe costruire, come mvn -P abc installazione pulita

Un GROSSO problema si può avere con questo approccio è che ogni manufatto costruito avrà lo stesso nome, e sovrascriverà nel tuo repository locale.

Sì, sto rispondere a questa domanda due volte perché ogni approccio è notevolmente diversa.

Piuttosto che avere un unico pom.xml che ha un profilo per ognuno dei vostri file di guerra, si potrebbe avere un progetto che contiene 11 moduli. Un modulo Maven che ha tutte la fonte condivisa, e poi ciascuno dei vostri file di guerra sarebbe stato un altro, modulo adiacente che ha solo i file specifici ad esso. Tutti questi moduli sono stati sotto uno pom radice.

Nel pom per ciascuno dei moduli di guerra, si sarebbe poi impostare le risorse e sourceDirectory all'interno della vostra configurazione di generazione per puntare a ../base-project/src/main/resources e ../base-project/src/ main / java rispettivamente.

La configurazione di Maven-guerra-plugin dovrebbe quindi configurazione webResources per puntare a ../base-project/src/main/webapp e alla vostra guerra risorse specifiche in ./src/main/webapp.

Con questa soluzione, si avrebbe diversi manufatti Maven per ciascuno dei vostri file di guerra e tutti avrebbero potuto coesistere all'interno della vostra repository .m2 senza problemi.

Si può sempre utilizzare il Maven-remote-risorse-plugin. Si potrebbe creare modulo costruisce per ciascuno dei vostri set di risorse, ad esempio la creazione di uno chiamato 'my-progetto-risorse-customer1.jar. Questi sono solo come un qualsiasi altro manufatto Maven e possono essere messi nei vostri repos locali o remoti.

Nella vostra guerra costruire si avrebbe la configurazione plug mostrato di seguito, che esploderà il contenuto dei vasi fascio risorsa specificata nella directory di destinazione e successivamente includere nel file di guerra. Questa configurazione potrebbe essere eaily controllato da profili che impostare una proprietà 'profilename' per selezionare la risorsa richiesta.

<plugin>
    <artifactId>maven-remote-resources-plugin</artifactId>
    <executions>
      <execution>
        <phase>validate</phase>
        <goals>
          <goal>process</goal>
        </goals>
        <configuration>
          <resourceBundles>
            <resourceBundle>org.mygroup:my-project-resources-${profilename}:${pom.version}</resourceBundle>
          </resourceBundles>
        </configuration>
      </execution>
    </executions>
  </plugin>

Un avvertimento (suo uno piccolo) è quello di essere attenti a come si specificano le versioni di risorse se si sta utilizzando il plugin Maven il rilascio. Se le vostre risorse e file di guerra quota di una versione comune, ti consigliamo di utilizzare il $ {} pom.version proprietà nel plugin. Poi, quando il plugin release aggiorna la versione genitore a 1.1 il plugin rifletterà questa utilizzare automaticamente la versione 1.1 del raggruppamento di risorse. Se non stai rilasciando i gruppi di risorse di pari passo con la guerra, allora andrà tutto bene specificare la versione in modo esplicito.

HTH

ste

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