Plugin wydania Mavena nie działa: artefakty źródłowe są wdrażane dwa razy

Używamy wtyczki wydania Maven na hudson i staramy się zautomatyzować proces wydania. Wydanie: prepare działa dobrze. Gdy spróbujemy wykonać release: perform, nie powiedzie się, ponieważ dwukrotnie próbuje przesłać artefakt źródłowy do repozytorium.

Things that I tried,

  1. usunięcie profilu, który zawiera wtyczkę Maven source z super pom (nie działa)
  2. określenie celów Hudsona dla wydania as-P!załącz-źródło release: prepare release: wykonaj. Co, jak myślałem, wykluczy wtyczkę źródłową z wykonania. (nie działa).
  3. próbowałem określić fazę wtyczki do jakiejś nieistniejącej fazy w super pom.(Nie działa)
  4. próbowałem określić konfigurację wtyczki, forReleaseProfile jako false. (zgadnij co?? Did not work too)

Nadal wypluwa ten błąd.

[INFO] [DEBUG] Using Wagon implementation lightweight from default mapping for protocol http
[INFO] [DEBUG] Using Wagon implementation lightweight from default mapping for protocol http
[INFO] [DEBUG] Checking for pre-existing User-Agent configuration.
[INFO] [DEBUG] Adding User-Agent configuration.
[INFO] [DEBUG] not adding permissions to wagon connection
[INFO] Uploading: http://xx.xx.xx.xx:8081/nexus/content/repositories/releases//com/yyy/xxx/hhh/hhh-hhh/1.9.40/hhh-hhh-1.9.40-sources.jar
[INFO] 57K uploaded  (xxx-xxx-1.9.40-sources.jar)
[INFO] [DEBUG] Using Wagon implementation lightweight from default mapping for protocol http
[INFO] [DEBUG] Using Wagon implementation lightweight from default mapping for protocol http
[INFO] [DEBUG] Checking for pre-existing User-Agent configuration.
[INFO] [DEBUG] Adding User-Agent configuration.
[INFO] [DEBUG] not adding permissions to wagon connection
[INFO] Uploading: http://xx.xxx.xx.xx:8081/nexus/content/repositories/releases//com/xxx/xxxx/xxx/xxx-xxx/1.9.40/xxx-xxx-1.9.40-sources.jar
[INFO] [DEBUG] Using Wagon implementation lightweight from default mapping for protocol http
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [ERROR] BUILD ERROR
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] Error deploying artifact: Authorization failed: Access denied to: http://xx.xxx.xx.xx:8081/nexus/content/repositories/releases/com/xxx/xxx/xxx/xxx-config/1.9.40/xxx-xxx-1.9.40-sources.jar

Każda pomoc w tym zakresie będzie naprawdę doceniana.

Author: Vanchinathan Chandrasekaran, 2010-11-23

9 answers

Spróbuj uruchomić mvn -Prelease-profile help:effective-pom. Przekonasz się, że masz dwie sekcje wykonania dla maven-source-plugin

Wynik będzie wyglądał mniej więcej tak:

    <plugin>
      <artifactId>maven-source-plugin</artifactId>
      <version>2.0.4</version>
      <executions>
        <execution>
          <id>attach-sources</id>
          <goals>
            <goal>jar</goal>
          </goals>
        </execution>
        <execution>
          <goals>
            <goal>jar</goal>
          </goals>
        </execution>
      </executions>
    </plugin>

Aby rozwiązać ten problem, znajdź wszystkie użyte maven-source-plugin i upewnij się, że używasz attach-sources "id", aby był taki sam jak profil wydania. Następnie te sekcje zostaną połączone.

Najlepsza praktyka mówi, że aby uzyskać spójność, musisz skonfigurować to w głównym POM twojego projektu w build > pluginManagement i Nie w Twoim dziecku. W pom potomnym wystarczy określić w build > plugins, że chcesz użyć maven-source-plugin, ale nie podasz żadnych egzekucji.

W pokoju pom.xml:
<build>
  <pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <executions>
          <execution>
            <!-- This id must match the -Prelease-profile id value or else sources will be "uploaded" twice, which causes Nexus to fail -->
            <id>attach-sources</id>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>    
  </pluginManagement>
</build>
W pom.dziecięcymxml:
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-source-plugin</artifactId>
    </plugin>
  </plugins>
</build>
 56
Author: Bae,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-29 21:00:10

Wiem, że to pytanie jest stare, ale dzisiaj było google hit #1, więc dodam odpowiedź odpowiednią dla najnowszych wersji Mavena 3.

Symptomem jest to, że sources i javadoc jars są wdrażane dwa razy podczas budowania Wydania z niektórymi wersjami Mavena 3. Jeśli używasz Mavena do wdrażania artefaktów w repozytorium Sonatype Nexus, które pozwala na przesłanie artefaktu release tylko raz (co jest całkowicie rozsądnym zachowaniem), kompilacja nie powiedzie się, gdy druga próba przesłania zostanie odrzucona. Argh!

Maven wersje 3.2.3 thru 3.3.9 mają błędy-zobacz https://issues.apache.org/jira/browse/MNG-5868 i https://issues.apache.org/jira/browse/MNG-5939 . te wersje generują i wdrażają źródła i javadoc jars dwa razy podczas wykonywania wydania.

Jeśli dobrze przeczytałem Maven issue tracker, te błędy nie są zaplanowane do naprawy od tego pisania(spalone wydanie 3.4.0 prawdopodobnie miało na nie wpływ).

Zamiast skomplikowanego podkręcania do mojego pom, mojego prostego obejście miało wrócić do Maven w wersji 3.2.1.

 19
Author: chrisinmtown,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-21 19:12:07

Po prostu trafiłem w ten sam problem, przeanalizowałem go trochę. mvn release:perform ocenia wydanie.Plik Właściwości, następnie sprawdza znacznik w katalogu tymczasowym i wywołuje tam coś w rodzaju

/usr/bin/mvn -D maven.repo.local=... -s /tmp/release-settings5747060794.xml
    -D performRelease=true -P set-envs,maven,set-envs deploy

Próbowałem to odtworzyć-ręcznie sprawdziłem tag wyprodukowany przez release:prepare i wywołałem to:

mvn -D performRelease=true -P set-envs,maven,set-envs deploy

Otrzymałem ten sam wynik: próbowano wgrać źródła.słoik dwa razy.

Jak zauważył qualidafial w komentarzu, ustawienie performRelease=false zamiast pominięcia jednego z dwóch załączniki tego samego pliku.

Naprawdę nie mam pojęcia, jak deploy plugin (lub jakikolwiek inny plugin) używa tej właściwości.

Możemy podać ten parametr jako konfigurację do maven-relase-plugin:

<build>
    <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <useReleaseProfile>false</useReleaseProfile>
            </configuration>
        </plugin>
    </plugins>
</build>

Dodałem teraz linię <useReleaseProfile>false</useReleaseProfile> do wszystkich pomów i wygląda na to, że wydanie działa teraz bez komunikatu o błędzie.

 4
Author: Paŭlo Ebermann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:11

Zmagałem się z tym problemem przez jakiś czas i w końcu udało mi się go rozwiązać w naszej infrastrukturze. Odpowiedzi tutaj nie pomogły mi, ponieważ nie mieliśmy wielu egzekucji celów wtyczki źródłowej, a konfiguracja wydawała się nam w porządku.

To, co przegapiliśmy, to powiązanie wykonania wtyczki źródłowej z fazą. Rozszerzenie przykładu o linię install do wykonania rozwiązało problem dla us:

<plugin> <artifactId>maven-source-plugin</artifactId> <version>2.0.4</version> <executions> <execution> <id>attach-sources</id> <phase>install</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin>

Podejrzewam, że rozwiązanie leży w tej odpowiedzi tutaj ; różne wtyczki wydają się odwoływać się do celu jar / wykonania attach-sources. Wiążąc nasze wykonanie z określoną fazą, zmuszamy naszą wtyczkę tylko do uruchomienia w tej fazie.

 2
Author: Tobi Nonymous,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:01

Nie sądzę, aby probem był w pluginie release, myślę, że masz xxx-sources.jar dołączony dwa razy-dlatego duplikat uploadu. Dlaczego jest duplikat załącznika trudno powiedzieć, nie widząc POM. Spróbuj uruchomić mvn -X i sprawdzić dziennik, kto dołącza xxx-source.jar innym razem.

W każdym razie dobrym obejściem w Nexusie byłoby posiadanie repozytorium pośredniczącego, w którym możesz przesyłać wydania kilka razy - a gdy wszystko jest gotowe, po prostu zamknij / Promuj repo pośredniczące. Sprawdź ustawienia Sonatype Oss dla przykładu.

 0
Author: lexicore,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-23 07:50:34

Miałem ten sam problem. Zasadniczo komunikat o błędzie jest wydawany, gdy artefakty są wysyłane do Nexus dwa razy. Może to być dwa razy w tym samym repozytorium Nexus lub nawet w różnych repozytoriach w tym samym repozytorium Nexus.

Przyczyny takiej błędnej konfiguracji mogą się jednak różnić. W moim przypadku artefakty zostały poprawnie przesłane podczas etapu budowania mvn clean deploy w Jenkins, ale nie powiodło się, gdy próbowano przeprowadzić drugie wdrożenie. To drugie wdrożenie zostało skonfigurowane w Jenkins krok po kompilacji "Publikuj artefakty w repozytorium Maven".

 0
Author: not2savvy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-30 16:08:55

Wtyczki Mavena w rodzicielskich i potomnych pomach nie powinny mieć wykonania. Zgodnie ze standardową konwencją, zdefiniuj wszystkie wtyczki z wykonaniem/celami w nadrzędnym pom w sekcji Zarządzanie wtyczkami. Potomek pom nie powinien redefiniować powyższych szczegółów, ale wspomnieć tylko o wtyczce (z artifactId i wersją), która musi zostać wykonana.

Miałem podobny problem z maven-assembly-plugin z macierzystym pom jak poniżej:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <descriptors>
                        <descriptor>src/assembly/assembly.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

I dziecko Pom miał Maven-assembly-plugin jak poniżej:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2-beta-5</version>
            <configuration>
                <finalName>xyz</finalName>
                <descriptors>
                    <descriptor>src/assembly/assembly.xml</descriptor>
                </descriptors>
            </configuration>
            <executions>
                <execution>
                    <id>xyz-distribution</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Usuwanie <executions> od dziecka pom Skuteczny pom miał wykonane 2 egzekucje powodując duplikat instalacji do Nexus repo.

 0
Author: Amit Kaneria,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-02 16:13:25

FWIW ten problem przez jakiś czas łamał naszą kompilację, a odpowiedź nie brzmiała żadna z powyższych. Zamiast tego głupio ustawić pozornie nieszkodliwe appendAssemblyId na false w Maven-assembly-plugin dla artefaktu, który zostanie dołączony (Czytaj wdrożony, wydany) z naszym głównym artefaktem. Np.:

    <execution>
        <id>ci-groovy-distrib</id>
        <phase>package</phase>
        <goals>
            <goal>single</goal>
        </goals>
        <configuration>
            <descriptorRefs>
                <descriptorRef>my-extra-assembly</descriptorRef>
            </descriptorRefs>

            <!-- This is the BUG: the assemblyID MUST be appended 
                 because it is the classifier that distinguishes 
                 this attached artifact from the main one!
            -->
            <appendAssemblyId>false</appendAssemblyId>
            <!-- NOTE: Changes the name of the zip in the build target directory
                       but NOT the artifact that gets installed, deployed, releaseed -->
            <finalName>my-extra-assembly-${project.version}</finalName>
        </configuration>
    </execution>

W podsumowaniu:

  1. Wtyczka assembly używa assemblyId jako klasyfikatora dla artefaktu, stąd istotna część jego unikalnych współrzędnych GAV w maven terminy (właściwie to raczej współrzędne GAVC - C jest klasyfikatorem).

  2. Nazwa pliku zainstalowanego, rozmieszczony , lub zwolniony jest faktycznie zbudowany z tych współrzędnych. To Nie jest tym samym co nazwa pliku, który widzisz w katalogu docelowym . Dlatego twój lokalny build wygląda dobrze, ale twoje wydanie nie powiedzie się.

  3. Głupi element określa tylko nazwę lokalnego artefaktu i nie odgrywa w nim żadnej roli. To jest kompletny red-herring.

Podsumowanie podsumowania: błąd 400 z Nexusa był spowodowany tym, że nasz dodatkowy artefakt był przesyłany nad głównym artefaktem, ponieważ miał tę samą nazwę co Główny Artefakt, ponieważ miał te same współrzędne GAVC co Główny Artefakt, ponieważ usunąłem jedyną wyróżniającą współrzędną: klasyfikator pochodzący automatycznie z assemblyId.

Dochodzenie, aby znaleźć to było długie i kręte path the answer was right there all along in the docs for maven-assembly:

AppendAssemblyId

  • Boolean

  • Ustawiona na false, aby wykluczyć ID złożenia od ostatecznej nazwy asemblera, a do utworzenia asemblera wynikowego artefakty bez klasyfikatora. jako taki, artefakt montażowy mający ten sam format co opakowanie obecnego projektu Maven zastąpi plik do tego głównego projektu artefakt .

  • wartością domyślną jest: true.
  • właściwością użytkownika jest: assembly./ align = "left" /

Z http://maven.apache.org/plugins/maven-assembly-plugin/single-mojo.html#attach

Extra bold jest mój. Docs powinien mieć duże Ostrzeżenie: "ustaw to na false i porzuć wszelką nadzieję"

Otrzymałem pomoc z tej odpowiedzi na inny problem maven-assembly-plugin: Jak używać appendAssemblyId Wyjaśnienie tunaki naprawdę pomogło.

 0
Author: Rhubarb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-04 12:20:03

Skonfigurowałem wtyczkę wydania Mavena z releaseProfile=false i nie wykonuję profilu artefaktów źródłowych. Co zadziałało.

<build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-release-plugin</artifactId>
                    <version>2.1</version>
                    <configuration>
                            <arguments>-P!source-artifacts</arguments>
                            <useReleaseProfile>false</useReleaseProfile>
                            <goals>-Dmaven.test.skip=true deploy</goals>
                    </configuration>    
                </plugin>
            </plugins>
        </build>
 -3
Author: Vanchinathan Chandrasekaran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-30 15:57:54