Wie gehen Sie zu Phase in Maven Build installieren, wenn ich bereits diese Version in Repo installiert

StackOverflow https://stackoverflow.com/questions/3147714

  •  01-10-2019
  •  | 
  •  

Frage

habe ich ein Projekt, das aus 3 verschiedenen Bibliotheken bestehen. Wenn ich Skript ausführen installieren dauert es alle Bibliotheken aus Repo- und laufen MVN auf sie reinigen installieren. Aber diese Version der Bibliothek bereits in Repo installiert. Gibt es eine Möglichkeit installieren überspringen Phase, wenn Version in pom.xml gleich Version in meinem lokalen Repo.

Ich weiß, dass ich lokalen Repo und nur gesetzte Abhängigkeiten verwenden kann. Aber mein Chef möchte, dass unser Projekt nur mit öffentlichen repos aufbauen können und ohne unsere repos.

War es hilfreich?

Lösung

Sie können Bypass wie diese

-Dmaven.install.skip=true

<profiles>
   <profile>
     <id>skipInstall</id>
     <activation>
       <property>
         <name>maven.install.skip</name>
         <value>true</value>
       </property>
     </activation>
     <build>
       <pluginManagement>
         <plugins>
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-install-plugin</artifactId>
             <executions>
               <execution>
                 <id>default-install</id>
                 <phase>none</phase>
               </execution>
             </executions>
           </plugin>
         </plugins>
       </pluginManagement>
     </build>
   </profile>

Letzte Woche Olivier Lamy gepatcht diese jira.

minstall-73

Andere Tipps

Die meisten maven Plugins können durch Angabe etwas wie übersprungen werden:

        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>X.Y</version>
          <configuration>
            <skip>true</skip>
          </configuration>
        </plugin>

Sie können auch Build-Profile festgelegte Eigenschaften und Verwendung eingerichtet, dass der Wert zu bestimmen. beispielsweise den Befehl ausführen: mvn -Pexample würde wählen Sie das „Beispiel“ -Profil. Die POM würde dann enthalten:

...
  <properties>
    <skip.install>false</skip.install>
...
  </properties>

...
    <profile>
      <id>example</id>
      <properties>
        <skip.install>false</skip.install>
      </properties>
    </profile>
...
    <plugin>
      <artifactId>maven-install-plugin</artifactId>
      <version>X.Y</version>
      <configuration>
        <skip>${skip.install}</skip>
      </configuration>
    </plugin>
...

Mit diesen POM Ergänzungen, das Standardverhalten für die Installation von Plugins wird den Standard Ziel zu erfüllen, aber wenn das Beispiel-Profil ausgewählt ist, dann ist die Installation von Plugin wird sein Ziel überspringt.

Mit was ich von den anderen Antworten gelernt, war dies das sauberste Ergebnis für mich.

In meiner Super-pom Ich habe ein pluginManagement / Plugin zu deaktivieren Standard-Installation und Standard-Testphasen, wenn die Eigenschaft deployOnly eingestellt ist.

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <version>2.5.2</version>
                <executions>
                    <execution>
                        <id>default-install</id>
                        <configuration>
                            <skip>${deployOnly}</skip>
                        </configuration>
                    </execution>
                    <execution>
                        <id>default-test</id>
                        <configuration>
                            <skip>${deployOnly}</skip>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

So auf der Kommandozeile, kann ich deaktivieren installieren und Testphasen durch -DdeployOnly Zugabe.

mvn clean install       #build and test everything
mvn deploy -DdeployOnly #just deploy it

Ich weiß, dass ich lokalen Repo und nur gesetzte Abhängigkeiten verwenden kann. Aber mein Chef möchte, dass unser Projekt nur mit öffentlichen repos aufbauen können und ohne unsere repos.

Sind Sie sicher, dass Sie richtig verstanden, was du Chef gemeint? Ich interpretiere das oben als „nicht Drittanbieter-Bibliotheken in Ihrem lokalen Repository installieren, nur den Einsatz in öffentlichen Repositories verfügbare Bibliotheken“. Dies unterscheidet sich von „nicht Ihr lokales Repository verwenden“, die im Grunde unmöglich ist, das ist einfach nicht wie funktioniert maven. Ich würde versuchen, diesen Punkt zu klären.

Abgesehen davon, dass ich nicht die Frage bekommen, die sehr verwirrend ist (was Repo redest du da? Was tut Installationsskript ist? Warum nennst du saubere Installation auf Bibliotheken? Etc).

Die Ausweitung der anderen Antworten, aus der Zukunft.

Maven Plugins haben eine überraschend hohe Freiheit, wie sie laufen. Wenn sie wollen, können sie die typischen pom.xml Einstellungen ignorieren / außer Kraft setzen. Darüber hinaus auch die <configuration><skip>true</skip></configuration> ist nur eine Konvention, nichts verpflichtet ein Plugin, ihm zu folgen, mit der Ausnahme, dass die meisten von ihnen entwickelte so.

Meine Experimente mit der jüngsten Problem zeigen, dass beide @ Cemo der und @MiloshBoroyevich Lösung sollte verwendet werden, auch das Plugin beide erfordert wirklich uns in Ruhe lassen. Genauer gesagt war die einzige funktionierende Konfiguration von mir so aus:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.5.2</version>
    <executions>
        <execution>
            <id>default-install</id>
            <phase>none</phase>
        </execution>
    </executions>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top