2012-05-01 17 views
6

Używam wtyczki maven-assembly do zbudowania wykonywalnego, monolitycznego słoika z zależnościami. Używam filtrowania zasobów do ustawiania niestandardowych właściwości specyficznych dla linii (deweloperów, etapów, prod itp.).Dołącz nazwę profilu Maven w wbudowanej wtyczce zespołu (z zależnościami)

W jaki sposób dokonać ostatecznej nazwy słoika to nazwa pasa (dev, stage, prod, itp)?

Chciałbym następujące mvn poleceń spowoduje w słoikach, które wyglądają mniej więcej tak:

  • mvn czystej instalacji -P DEV -> WS-client-DEV.jar
  • mvn czystej instalacji -P ETAP -> WS-client-STAGE.jar
  • mvn czystej instalacji -P prod -> WS-client-PROD.jar

istnieje własność Maven gdzieś nie mogę znaleźć? Chciałbym uniknąć użycia redundantnego argumentu wiersza poleceń, jeśli to możliwe (np. - "mvn clean install -P DEV -Dlane = DEV").

Oto moja konfiguracja wtyczki montaż:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2.2</version> 
    <executions> 
     <execution> 
      <id>jar-with-dependencies</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
     <finalName>ws-client</finalName> 
     <appendAssemblyId>false</appendAssemblyId> 
     <archive> 
      <manifest> 
       <mainClass>Example</mainClass> 
      </manifest> 
     </archive> 
    </configuration> 
</plugin> 

Odpowiedz

9

Podobny do Bhaskara, ale nieco zmodyfikowany.

Po <build> tagu dodać

<finalName>${project.artifactId}-${lane}</finalName> 

Można ustawić wartość pasa jako właściwości w profilu.

<profiles> 
    <profile> 
     <id>DEV</id> 
     <properties> 
      <lane>DEV</lane> 
     </properties> 
    </profile> 
</profiles> 

następnie wykonać kompilację jak mówisz: ... mvn -P DEV (np mvn czystej instalacji -P DEV)

+0

Fantastyczna, przepięknie wykonana! – chadmaughan

+0

Ostateczna nazwa nie będzie działać na wdrożonym artefakcie tylko w artefakcie, który jest przechowywany w folderze docelowym w bieżącym uruchomieniu. – khmarbaise

+0

@khmarbaise - Prawidłowo. W tym konkretnym przypadku słoik jest dystrybuowany poza repozytorium (wiem, że nie jest idealny). Chciałem wizualnego wskazania, aby konsument "bez mafii" wiedział, jaką ścieżkę i właściwości używa, po prostu przeglądając plik jar w ich ścieżce klasycznej. – chadmaughan

2

Po <build> tagu dodać

<finalName>${project.artifactId}-${lane}</finalName> 

i ustaw "pasa" env zmienną do nazwy profilu np

mvn -P DEV -Dlane = DEV itp

Albo możesz być nieco bardziej kreatywne i odkryć aktywny identyfikator profilu, jak opisano tutaj Maven - Can I reference profile id in profile definition?

EDIT ------

Jeśli chcesz uniknąć zbędnych argumentów.

Dlaczego nie wyzwolić odpowiednich profili za pomocą env. własność.

tak na linii poleceń

mvn -Dlane=DEV|STAGE|PROD 

aw pom

<profile> 
    <id>DEV</id> 
    <activation> 
    <property> 
     <name>lane</name> 
     <value>DEV</value> 
    </property> 
    </activation> 
    <build> 
    // rest of the profile 
</profile> 

I sam na scenie i profili prod.

+0

Dzięki za odpowiedź.Chciałem uniknąć, jeśli to możliwe, nadmiarowego argumentu wiersza poleceń (zaktualizowałem moje pytanie, aby to odzwierciedlić). Twój podany link jest interesujący. Wszelkich pomysłów, w jaki sposób odwołać się do wiersza poleceń określony (aktywny) profil za pośrednictwem właściwości mvn? – chadmaughan

+0

Edytowane z dodatkowymi informacjami na temat unikania redunduncji –

Powiązane problemy