Anderes Goal ausführen

Hohi!

Ich möchte gerne bei einem post-clean oder compile Versuch von einem anderen Projekt ein goal (package) ausführen lassen, da das Paket gebraucht wird.

Die Frage ist aber, wie zum Geier schaffe ich das?

<build>
		<plugins>
			<plugin>
				<artifactId>maven-antrun-plugin</artifactId>
				<executions>
					<execution>
						<phase>post-clean</phase>
						<goals>
							<goal>run</goal>
						</goals>
						<configuration>
							<tasks>
								<execute></execute>
								<echo message="test ARSCH phase" />
							</tasks>
						</configuration>
					</execution>
				</executions>
			</plugin>

Somit schaffe ich wenigstens eine Ausgabe im post-clean, aber wie zum Geier rufe ich ein maven package vom anderen Artifakt auf?

Gar nicht, dafür ist Maven nicht gedacht. Du kannst aber zusätzliche Executions in dem entsprechenden Maven Plugin konfigurieren und an die passende Phase hängen.

Mhm… dachte ich mir schon irgendwie.

Gibt es da wo eine Doku die man auch versteht? Ich verstehe echt NULL von der ganzen Maven Doku mit diesen ganzen Plugin-Scheisse und den ganzen Kram.

Ich will einfach meine Erweiterungen und was ich machen kann, so wie beim ANT. Das ist ne super Doku, aber das Maven ist ja nur zum Scheissen.

Lustigerweise geht nichtmal mehr das da oben. Wenn ich cleane kommt mehr keine Meldung raus… Finde das ja sowas von zum Kotzen…
Edit: OK, solange wieder Rückgängig geklickt bis es ging. Sehe zwar genau NULL Unterschied, aber es geht immerhin meine echo Ausgabe wieder :wink:

Nein Maven und auch die Doku sind super. Maven ist halt ein Buildprozessor und keine Scripting-Umgebung wie ANT.

Also zeig mal / erklär mal genau was du willst, das hört sich tatsächlich sehr sehr ANT-lastig an und das ist der total falsche Ansatz bei Maven.

Lass mich raten: ein ANT-Projekt nach Maven überführen? Lass es besser, das führt (gerade wenn man neu bei Maven ist) nur zu Frust.

Nein nein…

Also ich habe 2 Maven-Projekte, welche ansich auch funktionieren. Bei einem der Projekte kommt ein WAR-File raus (via Maven-Assembly-Task) und das benötigt MEIN Projekt (3tes Maven Projekt) aber im SOURCE, bzw. Resources da es diese WAR-Datei ausführt.

Ich will das ganze halt ziemlich User-Friendly machen, sodass man nicht explizit ANT aufrufen muss, sondern der sich das halt via Maven selbst baut.

Ich müsste halt in dem Lifecycle post-clean oder initialize (irgendwann am Anfang) und beim package (damit alles neugebaut wird) mich reinhängen, dass es eben vom anderen Projekt das WAR-File baut und dieses mir dann in den resources Ordner schiebt (ANT Task).

Das sollte Maven auch schaffen können, aber Problem ist eher, wie sage ich meinem Projekt, er soll von einem anderen Projekt das maven package aufrufen?!

Falls es nicht klappt, muss man halt das WAR-File via maven vom anderen Projekt erstellen lassen und mein Projekt kopiert sich das via ANT-Task im Maven halt rüber.

Das nächste Problem…

<executions>
	            <execution>
	               <phase>test</phase>
	               <goals>
	                  <goal>run</goal>
	               </goals>
	               <configuration>
	                  <tasks>
	                     <echo message="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"/>
	                  </tasks>
	               </configuration>
	            </execution>
	         </executions>

Das klappt Tip Top! Bekomme bei test eine Meldung…

Aber wieso kommt da nichts raus bei “post-clean”, “compile”, etc.? Ich verstehe diese Plugin-Abhandlungsreihenfolge sowieso überhaupt nicht…

Die sich gegenseitig brauchen? Circular Dependencies? Oo Really?

Ok, nicht gegenseitig. Projekt 1 braucht was vom Projekt 2.

Und mein Projekt (Projekt 3) benötigt vom Projekt1 das WAR File in den Resources :wink:

Dann muss Project 3 auch ein WAR sein und dann wird es automatisch deflated wenn du baust. Also Project1 als Dependency einfügen und fertig.

Nein, Projekt 3 ist kein WAR, sondern hat winstone (servlet engine) dabei. Also es startet einen Mini-WebServer und soll die GUI für die Mini-WebServer Sachen sein (also Einstellungen vom Projekt welche in config Files/System-Parameter steht).

Deswegen benötigt es Projekt1 als WAR.

Hi,

  1. Das ant-run-plugin vergessen, Ant Umsteiger die in Maven einsteigen kommen damit nur auf blöde Ideen
  2. Maven Doku lesen
  3. Die WAR als Dependency einfügen, dann kannst du damit so ziemlich alles machen was du möchtest.

Niemals andere Artifakte in die Sourcen/Resourcen kopieren, niemals „Dateien“ aus anderen Projekten&/Modulen als solche betrachten, das sind alles Artifkate, und an diese kommt man wenn man sie als dependency angibt :wink:

Ad 2) Irgendwie mag ich die nicht :smiley:

Ad 3) Werde ich mal testen… Problem ist halt, dass mein Programm diese WAR Datei wo bereitstellen sollte, sodass Winstone diese natürlich „deployen“/ausführen kann. Deswegen lag diese halt in den Resourcen und ich entpackte aus dem JAR halt diese WAR Datei.
Aber mal gucken wie ich sie abgreifen kann, wenn sie als Dependency drinnen ist.

Gut ist ja, dass das Projekt 1 nur als WAR rauskommt. Also schon richtig baut und als Dependency kann diese drinnen hängen.

Wobei mir gerade eingefallen ist, dass sich Maven beschwert hat, weil das eine .jar gesucht hat und es halt eine .war ist.
Muss ich da bei Dependency noch wo sagen, dass es sich um ein WAR handelt?

Ad 2) Irgendwie mag ich die nicht

… und deswegen versuchst du auch ständig Wände einzurennen :smiley:
Die Basics (und um diese geht es hier) sind IMHO sehr gut dargestellt.

Wobei mir gerade eingefallen ist, dass sich Maven beschwert hat, weil das eine .jar gesucht hat und es halt eine .war ist.

Hast du denn das packaging auf war gestellt?
Wozu eigentlich das Assembly Plugin? Ein WAR baut dir Maven auch so…

Puu… Das ist nicht von mir, ist was von git: https://github.com/cgiesche/jdadapter

Auszug aus pom.xml

 	<groupId>de.perdoctus</groupId>
	<artifactId>jdadapter</artifactId>
	<version>0.4.3-SNAPSHOT</version>
	<packaging>war</packaging>
....

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.3.2</version>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-assembly-plugin</artifactId>
				<version>2.3</version>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>single</goal>
						</goals>
					</execution>
				</executions>
				<configuration>
					<descriptors>
						<descriptor>assembly.xml</descriptor>
					</descriptors>
				</configuration>
			</plugin>
		</plugins>
	</build>

assembly.xml

<!--
  ~ Copyright 2013 Christoph Giesche
  ~
  ~ This file is part of jdadapter.
  ~
  ~ jdadapter is free software: you can redistribute it and/or modify
  ~ it under the terms of the GNU General Public License as published by
  ~ the Free Software Foundation, either version 3 of the License, or
  ~ (at your option) any later version.
  ~
  ~ jdadapter is distributed in the hope that it will be useful,
  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  ~ GNU General Public License for more details.
  ~
  ~ You should have received a copy of the GNU General Public License
  ~ along with jdadapter.  If not, see <http://www.gnu.org/licenses/>.
  -->

<assembly
	xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">

	<id>Release Package</id>

	<formats>
		<format>zip</format>
	</formats>

	<includeBaseDirectory>true</includeBaseDirectory>

	<baseDirectory>JdAdapter ${project.version}</baseDirectory>

	<fileSets>
		<fileSet>
			<directory>src/main/bin</directory>
			<outputDirectory>/</outputDirectory>
		</fileSet>
	</fileSets>

	<dependencySets>
		<dependencySet>
			<includes>
				<include>org.jvnet.hudson.winstone:winstone</include>
			</includes>
		</dependencySet>
	</dependencySets>

	<files>
		<file>
			<source>target/${project.build.finalName}.war</source>
			<destName>JdAdapter.war</destName>
		</file>
	</files>
</assembly>

Es wird ja auch brav mit package gebaut, aber halt als .war.

Nein ich glaube das WAR hat er schon, was du vermutlich suchst ist das Maven Assembly Plugin :slight_smile: Das kann entsprechende Deployments anhand von Definitionen zusammenbauen (Apache Maven Assembly Plugin – Usage)

Hrhr… Mit dem mache ich sogar schon mein END-Jar, sodass Winstone & Co dabei sind (auch die Main-Class wird da drin definiert).
Problem dabei ist aber, dass ich nicht in Eclipse auf PLAY drücken kann, weil ja nur im END-Jar das Projekt1-WAR wäre und nicht in den Resourcen. Und wenn sie nicht in den Dependency´s ist, dann natürlich auch nicht im CLASSPATH.

Mein Problem ist ja nur ein „First world problem“, weil ich halt alles einfach machen will für neue Entwickler :smiley:
Im schlimmsten Fall gibt es ein README.TXT und ein ANT-Script :smiley:

Achja, beim Dependency bei Projekt3 musste ich fürs Projekt1 noch

war

hinzufügen und dann sucht er auch brav nach .war und nicht nach .jar!