2012-12-13 21 views
14

mogę wdrożyć jar za pomocą następujących w moim pom.xml i działa mvn deploy:Maven wdrażać słoik z zależnościami do repo

<distributionManagement> 
    <repository> 
     <id>releases</id> 
     <url>http://${host}:8081/nexus/content/repositories/releases</url> 
    </repository> 
    <snapshotRepository> 
     <id>snapshots</id> 
     <name>Internal Snapshots</name> 
     <url>http://${host}:8081/nexus/content/repositories/snapshots</url> 
    </snapshotRepository> 
</distributionManagement> 

I mogę zbudować wykonywalny jar-with-dependencies przy użyciu następujących:

 <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>create-executable-jar</id> 
        <phase>deploy</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
        <configuration> 
         <descriptorRefs> 
          <descriptorRef>jar-with-dependencies</descriptorRef> 
         </descriptorRefs> 
         <archive> 
          <manifest> 
           <mainClass>my.company.app.Main</mainClass> 
          </manifest> 
         </archive> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

Problem polega na tym, że nie wiem jak połączyć te pliki, aby wdrożyć plik wykonywalny jar do repozytorium Maven. Naprawdę nie wiem, czy jest to realizowane przez nową wtyczkę lub przez dodanie celu lub innego kroku do istniejącej wtyczki zespołu.

+1

Interesujące ... więc chcesz pojedynczy słoik, który zawiera wszystkie jego zależności ('jar-with-dependencies') do nexusa? Zakładam, że kiedy wdrożysz to w środowisku produkcyjnym, ten słoik będzie samodzielny (skoro ma wbudowane wszystkie jego zależności)? –

Odpowiedz

0

Zasadniczo moja trudność spowodowała, że ​​mój pom.xml był już poza torami. Wszystko samo by się ułożyło. Ja dawniej robi:

  • Zapisz wszystkie zależności w folderze lib
  • Budowanie słoik z classpath slurping się, że plugin lib
  • Użyj montaż dokonać innego rozmieszczenia Jar

Myślę, że było kilka powodów, które miały tego rodzaju sens, zwłaszcza gdy moje biblioteki nie były dobrze uwzględnione w moich aplikacjach.

Jednak po usunięciu 1 i 2 wystarczy tylko sekcja distributionManagement, a faza wdrażania działa automatycznie. W sumie jest to niesamowity przypadek dosłownie dodawania funkcjonalności poprzez usuwanie dużych warstw kodu.

+3

Miałem ten sam symptom * słoika - z -dependencies.jar nie jest wypychane przy użyciu deploy. Mój problem polegał na nieprawidłowej konfiguracji wtyczki - musiałem powiązać fazę pakietu, jak opisano w dokumentacji (http://maven.apache.org/plugins/maven-assembly-plugin/usage.html) – ahains

+0

@ahains thanks ! to lepsze rozwiązanie. proszę, odpowiedz na to, abym mógł cię naprawdę awansować :) – Karussell

3

Następujące pracował. Pozostawię to pytanie otwarte, ponieważ nie jestem przekonany, że to najlepsza praktyka, ale praca jest czymś.

Problemy, które zauważam, to to, że wymyśliłem imię i nazwisko i nie wiem, czy to jest zwykła praktyka, i że muszę mocno zakodować nazwę słoika; nie wynika z niczego innego.

<plugin> 
<artifactId>maven-deploy-plugin</artifactId> 
<version>2.7</version> 
<executions> 
    <execution> 
     <id>deploy-executable</id> 
     <goals> 
      <goal>deploy-file</goal> 
     </goals> 
     <configuration> 
      <file>target/Monitoring-Client-1.0-SNAPSHOT-jar-with-dependencies.jar</file> 
     </configuration> 
    </execution> 
</executions> 
</plugin> 
+0

Wygląda dobrze, ale niestety nie działa dla mnie: nie udało się wykonać celu org.apache.maven.plugins: maven-deploy-plugin: 2.8.2: plik-wdrażania (domyślny-cli) w projekcie BackofficeSmokeTest: plik parametrów ',' url 'for cel org.apache.maven.plugins: maven-deploy-plugin: 2.8.2: brakuje pliku wdrażania lub jest on nieprawidłowy -> [Pomoc 1] –

4

W celu zbudowania (tzw) Über JAR i wdrożyć go przy użyciu Maven, można również użyć shade plugin. Poniższy kod pochodzi z ich strony internetowej, ale zrobiłem jeden lub dwa projekty korzystające z tej funkcji.

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>2.0</version> 
     <executions> 
      <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <shadedArtifactAttached>true</shadedArtifactAttached> 
       <shadedClassifierName>jackofall</shadedClassifierName> <!-- Any name that makes sense --> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 

W tej konfiguracji otrzymujesz Über JAR jako jedno wdrożenie poza normalnym plikiem JAR. Użytkownik twojego JARa może następnie zdecydować się na pobranie pakietu all-in-one lub JAR z zależnościami opartymi na klasyfikatorze.

Zwykle używam wtyczki cienia do budowania Über JAR (lub modyfikowania JAR w pewien sposób) i użycia wtyczki zespołu do budowania takich rzeczy jak pakiety instalacyjne (zawierające JAR i ewentualnie inne rzeczy). Nie jestem pewien, jakie są jednak zamierzone cele pojedynczych wtyczek.

0

Po pierwsze nie powinieneś tworzyć słoika uber w fazie instalacji, lepiej to zrobić w fazie pakietu. Ponadto utworzony plik jar jest zwykle automatycznie dołączany do twojego artefaktu i będzie przesyłany do zdalnego repozytorium (w Twoim przypadku Nexus). Możesz to sprawdzić, jeśli po prostu spróbuj wykonać instalację mvn i spójrz na dane wyjściowe, jeśli utworzony jar jest zainstalowany w lokalnym repozytorium. Aby wdrożyć wyniki w nexusie, musisz zadzwonić do mvn deploy.

3

Jeśli wiązać zespół do fazy pakowania, to zainstalować w swoim repozytorium zarówno „regular” słoik i słoik z-zależnościami kiedy wykonujesz produkcji:

<plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <configuration> 
      <archive> 
       <manifest> 
        <mainClass>my.company.app.Main</mainClass> 
       </manifest> 
      </archive> 
      <descriptorRefs> 
       <descriptorRef>jar-with-dependencies</descriptorRef> 
      </descriptorRefs> 
     </configuration> 
     <executions> 
      <execution> 
       <id>make-assembly</id> <!-- this is used for inheritance merges --> 
       <phase>package</phase> <!-- bind to the packaging phase --> 
       <goals> 
        <goal>single</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 

thenn wystarczy uruchomić mvn clean install deploy do załaduj oba słoiki do repo

Powiązane problemy