Jak wdrożyć SNAPSHOT ze źródłami i JavaDoc?

92

Chcę wdrożyć źródła i javadoc z moimi migawkami. Oznacza to, że chcę zautomatyzować następujące polecenie:

mvn clean source:jar javadoc:jar deploy

Wystarczy wykonać:

mvn clean deploy

Nie chcę, aby generowanie javadoc / sources było wykonywane podczas installfazy (tj. Lokalnych kompilacji).

Wiem, że wtyczki source / javadoc można zsynchronizować z wykonaniem releasewtyczki, ale nie mogę dowiedzieć się, jak połączyć je z wydaniami migawek.

Henryk Konsek
źródło

Odpowiedzi:

76
<build>
  <plugins> 
    <plugin>
      <artifactId>maven-source-plugin</artifactId>
      <executions>
        <execution>
          <id>attach-sources</id>
          <phase>deploy</phase>
          <goals><goal>jar-no-fork</goal></goals> 
        </execution>
      </executions>
    </plugin>
    <plugin> 
      <artifactId>maven-javadoc-plugin</artifactId> 
      <executions> 
        <execution> 
          <id>attach-javadocs</id>
          <phase>deploy</phase>
          <goals><goal>jar</goal></goals> 
        </execution> 
      </executions> 
    </plugin>
    <plugin> 
      <!-- explicitly define maven-deploy-plugin after other to force exec order -->
      <artifactId>maven-deploy-plugin</artifactId> 
      <executions> 
        <execution> 
          <id>deploy</id>
          <phase>deploy</phase>
          <goals><goal>deploy</goal></goals> 
        </execution> 
      </executions> 
    </plugin>
  </plugins> 
</build>

Pełny przykład można znaleźć w Pomocy rodzica OSS firmy Sonatype .

sfussenegger
źródło
1
Używam tej konfiguracji i działa całkiem dobrze. Jednak miałem dwa małe problemy: jeden, wygenerowane źródła nie są uwzględnione w celu „jar”, ​​będziesz potrzebować „jar-no-fork”. Po drugie, we wtyczce do wydania jest błąd, który spowoduje dwukrotne wygenerowanie źródeł wydania (a zatem dwukrotne deploeyed, co doprowadzi do problemów z menedżerami repozytoriów)
mglauche
1
maven-source-plugin:jardołącza się packagedomyślnie do fazy, więc możesz przerwać <phase>verify</phase>i zrobić to samo. Poza tym nie jestem pewien, dlaczego miałbyś to dołączyć do weryfikacji i tak, ponieważ ta faza jest przeznaczona do „spakowania projektu i uruchomienia testów integracyjnych”.
mat b
@mglauche @matt dzięki za komentarze. Właśnie dokonałem odpowiednich zmian.
sfussenegger
1
@Henryk Ok, jawnie dodałem wtyczkę maven-deploy-plugin, a także wydaje (lub próbuje) maven, aby zagwarantować wykonanie wtyczki w czasie, gdy wtyczki są zdefiniowane w POM. Może to jednak wymagać trochę eksperymentów.
sfussenegger
1
użycie losowego identyfikatora tworzy nowe wykonanie. Pomyślałem, że zechcesz "przemapować" domyślne jedno wykonanie
Hurda
48

Aby dodać alternatywę, która nie wymaga grzebania w konfiguracji wtyczki:

mvn -DperformRelease=true [goals]

Podziękowania dla mcbeelen z http://sea36.blogspot.com/2009/02/attaching-javadocs-and-sources-to-maven.html?showComment=1314177874102#c6853460758692768998

Dan
źródło
4
Chciałbym wspomnieć, że ta funkcja może zniknąć w przyszłej wersji Mavena (prawdopodobnie Maven-4?). Sprawdź komentarz tutaj w sekcji profilu Maven Super POM: maven.apache.org/ref/3.1.1/maven-model-builder/super-pom.html
Dan,
46

Artykuł, do którego odnosi się Dan, wspomina również o innym podejściu, które działa bez modyfikowania poms ORAZ nie zniknie w najbliższym czasie:

mvn clean javadoc: jar source: jar install

Co działa dobrze z Maven 3+, wraz z ...

mvn clean javadoc: jar source: jar deploy

Które przetestowałem z Jenkinsa podczas wdrażania na Nexusie.

To podejście było fajne, ponieważ musiałem tylko zmodyfikować niektóre zadania Jenkinsa i nie musiałem mieszać z moimi pompami.

HDave
źródło
5
Dzięki za rozwiązanie bez pom! Zauważ, że javadoc: jar i / lub source: jar muszą pojawić się przed instalacją lub wdrożeniem , w przeciwnym razie dodatkowe pliki jar nie zostaną „dołączone” do wdrożenia.
seanf
2
FWIW te opcje działają również z package:mvn clean javadoc:jar source:jar package
ecoe
To jest dobra odpowiedź, ponieważ podaje dokładne polecenie tworzenia i przesyłania źródeł oraz javadoc do repozytorium.
russellhoff