# [Maven] mehrere Abhängigkeiten benutzen gleichbenannte aber verschiedene Resource



## dermoritz (30. Nov 2010)

Ich hab im Moment das Problem ein Projekt zu bauen (Maven -Assembly -"with-all-dependencies") das auch außerhalb von Eclipse läuft. Dieses Projekt hat 3 Abhängigkeiten, jede dieser Abhängigkeiten/jar-Dateien enthält eine "plugin.properties". Das Assembly-Plugin scheint aber in seiner Standardeinstellung damit nicht klar zu kommen: man findet in der gebauten jar-Datei nur eine plugin.properties - im Wurzelverzeichnis. (diese ist eine aus den 3 jar)
Die Klassen sind natürlich alle im entsprechenden Pfad vorhanden.

Wie kann ich nun Maven dazu bewegen diese Projekt richtig zu bauen - jede Abhängigkeit soll ihre eigene "plugin.properies"-Datei haben?


----------



## kama (30. Nov 2010)

Hallo,

las mal deine POM für das Assembly plugin sehen...

Gruß
Karl Heinz


----------



## dermoritz (1. Dez 2010)

Danke

ich hab durch googeln eine wahrscheinliche Lösung gefunden, hab sie aber noch nicht ausprobiert:

Maven dependencies jar not usable - Stack Overflow

Es liegt anscheinend am Assembly -plugin - Das kann sowas wohl nicht, da es immer alle jar's auspackt. Siehe Einleitungstext:
onejar-maven-plugin - Project Hosting on Google Code

ich werde heute dazu kommen es auszuprobieren. Falls jemand eine Lösung mit Assembly-Plugin hat (eine jar) wäre mir die aber lieber, denn das one-jar-repository funktioniert nicht mit nexus :-(.


----------



## dermoritz (1. Dez 2010)

Also das hat noch nicht geholfen - es kommt der selbe Fehler. Der genau Fehler ist übrigens:

```
java.util.MissingResourceException: The string resource '_UI_DiagnosticRoot_diagnostic' could not be located
	at org.eclipse.emf.common.util.DelegatingResourceLocator.delegatedGetString(DelegatingResourceLocator.java:487)
	at org.eclipse.emf.common.util.DelegatingResourceLocator.getString(DelegatingResourceLocator.java:392)
	at org.eclipse.emf.common.util.DelegatingResourceLocator.getString(DelegatingResourceLocator.java:506)
	at org.eclipse.emf.common.util.DelegatingResourceLocator.getString(DelegatingResourceLocator.java:498)
	at org.eclipse.emf.ecore.util.Diagnostician.createDefaultDiagnostic(Diagnostician.java:94)
	at org.eclipse.emf.ecore.util.Diagnostician.validate(Diagnostician.java:113)
```
diese String Resource ist wie erwähnt in der plugin.properties zu finden. Mit one-jar-Plugin landen alle jar-Dateien im "lib"-Ordner. da keine calss not found exceptions kommen scheinen die Klassen in den Jars auffindbar aber eben nicht die resourcen?! Macht es zum Beispiel einen Unterschied welche Klassen direkt von den EMF-Klassen abhängen? oder ist es völlig wurscht ob die abhängigkeiten indirekt sind?
Was könnte man denn machen um den Fehler weiter einzugrenzen?



EDIT: ich hab keine Ahnung warum es mit dem one-jar Plugin nicht läuft - ist eigentlich die eleganteste Lösung.
ABER mit dem shade-plugin läuft es:

```
<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-shade-plugin</artifactId>
				<version>1.4</version>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>shade</goal>
						</goals>
						<configuration>
							<transformers>
								<transformer
									implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
									<resource>plugin.properties</resource>
								</transformer>
							</transformers>
							<filters>
								<filter>
									<artifact>*:*</artifact>
									<excludes>
										<exclude>META-INF/*.SF</exclude>
										<exclude>META-INF/*.DSA</exclude>
										<exclude>META-INF/*.RSA</exclude>
									</excludes>
								</filter>
							</filters>
						</configuration>
					</execution>
				</executions>
			</plugin>
```
..es hängt die Plugin.properties einfach aneinander - natürlich blöd falls für die gleiche property mehrere Werte drinne stehen :-(. bei mir funktionierts aber. Die Filterung ist wichtig, da sonst eine Security Exception kommt - Signierung


----------

