[MAVEN] - Plugin 2 mal aufrufen

Hi

ich will das codehaus-plugin : “truezip-maven-plugin” zwei mal aufrufen und zwar zur phase “package”.

Zwischen den 2 Aufrufen soll gibts noch eine anderen Aufruf von “my-plugin”.

Problem ist dass die 2 Aufrufe des gleichen plugins “truezip-maven-plugin” zur gleichen phase “package” gropiert werden und nacheinander ausgeführt werden.

Wie kann ich den die Reihenfolge so anpassen dass der Zwischenaufruf von “my-plugin” funktioniert
?

Hm… wird so nicht gehen ohne dreckige hacks (verschiedene Phasen pro plugin aufruf)… was willst du denn eigentlich erreichen?
Um welches andere “my-plugin” geht es denn und was soll es machen?
Oft reicht es wenn man die module aufsplittet

“my-plugin” ist hier praktisch das “launch4j”

Das “truezip-maven-plugin” soll in einem ersten Schritt(1) ein Zip file auspacken auf den dann dann im SChritt 2 das “launch4j-plugin” zugreifen soll. In einem dritten Schritt(3) soll das “truezip-maven-plugin” alles zusammen in ein zip-file zusammenbauen “final-install-version.zip”

Hab mal beim ersten Aufruf die phase auf “test” gestellt, was ich schon als bösen HACK verstehe.
Das klappt auch grundsätzlich — weiteres Problem ist dass Schritt 2 und 3(beides phase “package”) vertauscht sind obwohl die im POM nacheinander “deklariert sind”

Wie kann ich denn grundsätzlich die Reihenfolge bestimmen, selbst wenn es sich um unterschiedliche Plugins handelt?

Das ist von Maven eigentlich nicht vorgesehen. Du könntest natürlich ein eigenes Plugin erstellen und von dort aus an die anderen Plugins agregieren.

Plugins, die in der gleichen Phase ausgeführt werden, sollten in der Reihenfolge, wie sie in der pom stehen ausgeführt werden. Welche Maven-Version nutzt du, in irgendeiner gab es mal einen Bug?

Die zwei Executions des truezip-maven-plugins könntest du auf prepare-package und package aufteilen, würde ich dabei auch nicht als dreckigen Hack sehen.
launch4j-plugin muss dann davor eingebunden sein, wenn es auch in package laufen soll.

Apache Maven 3.5.3

Is irgendwie nicht so!

Ist aber ein Feature seit 3.0.x.

Hab ich auch schon gelesen - und teste genau daran schon ne weile rum - das würde nämlich mein Problem lösen

aber wenn ein plugin in einer vorherigen phase des build-lifecycles schon mal benutzt wurde, und in einer nachfolgenden phase (wo es insgesamt drei andere pluginaufrufe gibt) nochmal benutzt wird, wird es zuerst aufgerufen.

Wie sieht denn die Konfiguration der beiden Plugins aus?

welcher beiden?

und habs eben nochmal getestet — rufe ich jedes plugin nur einmal auf — dann läuft das genau nach der Reihenfolge, wie das im pom deklariert ist. Sobald ein plugin A (in einer vorigen phase) schon mal benutzt wurde, wird plugin A als erstes in der nächste phase aufgerufen -_- hab das eben nochmal getestet

Der beiden Plugins, um die es hier geht.

also hier sind mal die Config der 3 Aufrufe:

<!-- truezip 1 -->
<configuration>
	<fileset>
		<directory>${project.basedir}/src/main/assembly/data.zip</directory>
		<outputDirectory>${project.build.directory}/package/${project.artifactId}</outputDirectory>
	</fileset>
</configuration>
				
<!-- l4j-clui -->				
<configuration>
	<headerType>gui</headerType>
	<outfile>${project.build.directory}/package/windows/${project.artifactId}/${project.artifactId}.exe</outfile>
	<jar>${project.build.directory}/${project.artifactId}-${version}-shaded.jar</jar>			
</configuration>

<!-- truezip 2 -->
<configuration>
	<fileset>
		<directory>${project.build.directory}/package/${project.artifactId}</directory>
		<outputDirectory>${project.build.directory}/${project.artifactId}.zip</outputDirectory>
	</fileset>
</configuration>

Vielleicht etwas ungünstig ausgedrückt, aber ich meinte den Plugin-Teil der beiden Plugins, so wie er in <plugins> steht.

		<plugins>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>truezip-maven-plugin</artifactId>
				<version>1.2</version>
				<executions>
					<execution>
						<id>copy-out-files</id>
						<phase>package</phase>
						<goals>
							<goal>copy</goal>
						</goals>
							<configuration>
								<fileset>
									<directory>${project.basedir}/src/main/assembly/data.zip</directory>
									<outputDirectory>${project.build.directory}/package/${project.artifactId}</outputDirectory>
								</fileset>
							</configuration>
					</execution>
				</executions>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-shade-plugin</artifactId>
				<version>1.7.1</version>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>shade</goal>
						</goals>
					</execution>
				</executions>
				<configuration>
					<shadedArtifactAttached>true</shadedArtifactAttached>
					<shadedClassifierName>shaded</shadedClassifierName>
					<transformers>
						<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
							<mainClass>com.App</mainClass>
						</transformer>
					</transformers>
				</configuration>
			</plugin>

			<plugin>
				<groupId>com.akathist.maven.plugins.launch4j</groupId>
				<artifactId>launch4j-maven-plugin</artifactId>
				<version>1.5.1</version>
				<executions>
					<execution>
						<id>1-l4j-clui</id>
						<phase>package</phase>
						<goals>
							<goal>launch4j</goal>
						</goals>
						<configuration>
							<headerType>gui</headerType>
							<outfile>${project.build.directory}/package/${project.artifactId}/${project.artifactId}.exe</outfile>
							<jar>${project.build.directory}/${project.artifactId}-${version}-shaded.jar</jar>		

							<errTitle>error-tile-placeholder</errTitle>
							<classPath>
								<mainClass>com.App</mainClass>
								<preCp>anything</preCp>
							</classPath>
							<jre>
								<path>./jre</path>
							</jre>
							<versionInfo>
								<fileVersion>1.0.0.0</fileVersion>
								<txtFileVersion>txt file version?</txtFileVersion>
								<fileDescription>a description</fileDescription>
								<copyright>my copyright</copyright>
								<productVersion>1.0.0.0</productVersion>
								<txtProductVersion>txt product version</txtProductVersion>
								<productName>${project.artifactId}</productName>
								<internalName>${project.artifactId}</internalName>
								<originalFilename>${project.artifactId}.exe</originalFilename>
							</versionInfo>
						</configuration>
					</execution>
				</executions>
			</plugin>





			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>truezip-maven-plugin</artifactId>
				<version>1.2</version>
				<executions>
					<execution>
					
						<id>2-copy-out-files2</id>
						<phase>package</phase>
						<goals>
							<goal>copy</goal>
						</goals>
						<configuration>
							<fileset>
								<directory>${project.build.directory}/package/${project.artifactId}</directory>
								<outputDirectory>${project.build.directory}/${project.artifactId}.zip</outputDirectory>
							</fileset>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>

reihenfolge im POM ist so ---- aber auch wenn man den ersten aufruf auf phase = “prepare-package” stellt wird als erstes Plugin in der phase “package” das truezip-plugin aufgerufen.

komisch dass alle im Netz etwas anderes behaupten

Du hast das truezip-maven-plugin als erstes eingebunden, also wird es als erstes innerhalb einer Phase ausgeführt.
Plugins doppelt einbinden klappt nicht.

Was anderes als was?

Etwa so müsste das aussehen:

  • shade als erstes, da als erstes in der package-Phase

  • launch4j als zweites, da als zweites in der package-Phase

  • truezip als drittes, da in der package-Phase als drittes, die Execution, die vorher laufen soll, läuft dann in der prepare-package-Phase

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>1.7.1</version>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>shade</goal>
          </goals>
        </execution>
      </executions>
      <configuration>
        ...
      </configuration>
    </plugin>
    
    <plugin>
      <groupId>com.akathist.maven.plugins.launch4j</groupId>
      <artifactId>launch4j-maven-plugin</artifactId>
      <version>1.5.1</version>
      <executions>
        <execution>
          <id>1-l4j-clui</id>
          <phase>package</phase>
          <goals>
            <goal>launch4j</goal>
          </goals>
          <configuration>
            ...
          </configuration>
        </execution>
      </executions>
    </plugin>
    
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>truezip-maven-plugin</artifactId>
      <version>1.2</version>
      <executions>
        <execution>
          <id>copy-out-files</id>
          <phase>prepare-package</phase>
          <goals>
          <goal>copy</goal>
          </goals>
          <configuration>
            ...
          </configuration>
        </execution>
        <execution>
          <id>2-copy-out-files2</id>
          <phase>package</phase>
          <goals>
          <goal>copy</goal>
          </goals>
          <configuration>
            ...
          </configuration>
        </execution>
      </executions>
    </plugin>
    

Mach eine neues Module/POM fuer launch4j, das erste ZIP kann im anderen Modul gebaut werden (warum trueZip und nicht andere plugins zum entpacken?).

Ein echtes Artifakt pro Modul ist am einfachsten.

Ein Hack der nicht funzt (mvn clean …), in der test phase gibt es noch keine Artifakte.