# Maven assembly vergisst eigene Klassen



## Kessi (8. Aug 2009)

Hi zusammen

Unter Verwendung von maven in Eclipse und dem folgenden Plugin:

[XML]
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-assembly-plugin</artifactId>
	<configuration>
		<descriptorRefs>
			<descriptorRef>jar-with-dependencies</descriptorRef>
		</descriptorRefs>
		<archive>
			<manifest>
				<mainClass>com.emc.Hello</mainClass>
			</manifest>
		</archive>
	</configuration>
	<executions>
		<execution>
			<id>make-assembly</id>
			<phase>package</phase>
			<goals>
				<goal>single</goal>
			</goals>
		</execution>
	</executions>
</plugin>
[/XML]

erstellt mir maven wunderbar beim Ausführen der assembly:single run configuration unter eclipse das gewünschte JAR "HelloSpring-0.0.1-SNAPSHOT-jar-with-dependencies.jar" in meinem target-Verzeichnis. Es beinhaltet alle Abhängigkeiten des Projekts aber leider nicht meine eigenen Artefakte  .

Lasse ich assembly:assembly laufen, so erstellt maven 2 Jars, eines mit nur den Abhängigkeiten und eines mit meinen eigenen Klassen drin :bahnhof: .

Was mache ich hier falsch?

Danke für jede Antwort und gruss
Kessi


----------



## kama (8. Aug 2009)

Hallo,

probier mal: 

mvn clean package

Das macht vorher alles sauber und danach wird alles compiliert und gepackt. Danach sollte in dem jar-with-dependencies alles enthalten sein....

MfG
Karl Heinz Marbaise


----------



## Kessi (9. Aug 2009)

Leider kein Erfolg, erstellt weiterhin 2 Jars, eins mit meinen Klassen und eines mit den Dependencies :noe: ...


----------



## kama (9. Aug 2009)

Hallo,

EDIT: Mir ist gerade noch etwas aufgefallen: Welche Version von Maven verwendest Du ? 
jetzt habe endlich verstanden was Du möchtest...ich stand ein wenig auf dem Schlauch...

Mit dem jar-with-dependencies wirst Du wie der Name schon sagt nicht dahin kommen wo du möchtests...

Du must einen eigenen Descriptor erstellen: (sprich im POM einen Eintrag machen:

[xml] <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.2-beta-3</version>
                <configuration>
                    <descriptors>
                        <descriptor>src/main/assembly/test.xml</descriptor>
                    </descriptors>
                </configuration>
    ...
[/xml]und im Verzeichnis src/main/assembly/test.xml dann den folgenden Inhalt:
[xml]<assembly>
  <id>test</id>
  <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    <dependencySet>
      <unpack>true</unpack>
        <scope>runtime</scope>
    </dependencySet>
  </dependencySets>
  <fileSets>
    <fileSet>
      <directory>${project.build.outputDirectory}</directory>
    </fileSet>
  </fileSets>
</assembly>[/xml]Das ist faktisch der Descriptor "jar-with-dependencies" aus der Doku....hier aber das <scope>runtime</scope> wichtig!

Dann sollte ein mvn package ein einziges Jar mit allem produzieren...

MfG
Karl Heinz Marbaise


----------



## Kessi (15. Aug 2009)

Aha, besten Dank schon mal  .

Ich werde das gleich ausprobieren, sobald ich wieder am Arbeitsplatz bin. Die Variante mit 2 JARs ist also mit jar-with-dependencies so gedacht. Das hat ja auch was für sich. Das Maven Tutorial hat mich da allerdings gehörig auf die falsche Fährte gelockt. Auch wenn ich es nochmals durchgehe möchte man meinen, es erklärt, wie ein einzelnes, ausführbares JAR erstellt wird.

Kann ich eigentlich auch über jar-with-dependencies ein ausführbars JAR meiner eigenen Klassen erstellen, indem es die Inhalte des dependencies-JAR in den Classpath übernimmt?

Thx again und greeets
Kessi


----------

