Thanks a lot John, this is exactly what I needed :) Based on the plugin configuration you suggested, I added promoteTransitiveDependencies property and set it to true so that transitive dependencies become direct dependencies in the shaded jar.
But I have one problem yet : I need to add some files to the shaded jar. I saw you can exclude files from the shaded jar with filters property, but I can't see a way to add a new file to the shaded jar. I thought about creating a new artifact in M2 repository with these files to add and add this artifact to the artifactSet includes property. It should work but I wonder if there's an easier way to do it. Do you have any idea about this ? Regards, Olivier 2008/9/5 John Prystash <[EMAIL PROTECTED]> > You might want to take a look at the shade plugin > > http://maven.apache.org/plugins/maven-shade-plugin/ > > A configuration like the following should create a jar containing the > classes from the two t4 jars you depend on: > > <plugin> > <groupId>org.apache.maven.plugins</groupId> > <artifactId>maven-shade-plugin</artifactId> > <executions> > <execution> > <phase>package</phase> > <goals> > <goal>shade</goal> > </goals> > <configuration> > <artifactSet> > <includes> > <include>t4:t4-core-utils</include> > <include>t4:t4-common-utils</include> > </includes> > </artifactSet> > </configuration> > </execution> > </executions> > </plugin> > > > > ----- Original Message ---- > From: Olivier THIERRY <[EMAIL PROTECTED]> > To: users@maven.apache.org > Sent: Friday, September 5, 2008 10:52:00 AM > Subject: How to merge pom files ? > > Hi all, > > I have two Maven projects named t4-core-utils and t4-core-commons. They > build jar artifacts and install them to my M2 repository. > Now I want to build a jar that merges both jars (extract files from these > jars and add them to a new jar) then install it to M2 repository so that it > can be used as a dependency in other Maven projects. > > I tried to use Maven Assembly plugin to achieve this. I could create the > new > jar and install it to M2 repo, but I have problems with the way pom file is > generated in M2 repo. > > The pom.xml is as following (t4-parent is used for dependency management) : > > <project xmlns="http://maven.apache.org/POM/4.0.0" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 > http://maven.apache.org/maven-v4_0_0.xsd"> > <modelVersion>4.0.0</modelVersion> > <groupId>t4</groupId> > <artifactId>t4-core-all</artifactId> > <packaging>jar</packaging> > <parent> > <groupId>t4</groupId> > <artifactId>t4-parent</artifactId> > <version>1.0-SNAPSHOT</version> > </parent> > <version>1.0-SNAPSHOT</version> > <name>T4 Core All</name> > <dependencies> > <dependency> > <groupId>t4</groupId> > <artifactId>t4-core-utils</artifactId> > <version>${version}</version> > </dependency> > <dependency> > <groupId>fr.horoquartz.t4</groupId> > <artifactId>t4-core-commons</artifactId> > <version>${version}</version> > </dependency> > </dependencies> > <build> > <plugins> > <plugin> > <artifactId>maven-assembly-plugin</artifactId> > <configuration> > <descriptors> > > <descriptor>src/main/assembly/t4-core-all.xml</descriptor> > </descriptors> > <appendAssemblyId>false</appendAssemblyId> > </configuration> > <executions> > <execution> > <phase>package</phase> > <goals> > <goal>attached</goal> > </goals> > </execution> > </executions> > </plugin> > </plugins> > </build> > </project> > > And the t4-core-all.xml file : > > <?xml version="1.0" encoding="UTF-8"?> > <assembly xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" > http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" > > http://maven.apache.org/POM/4.0.0../../../../exchange-ws-api/assembly-1.1.0-SNAPSHOT.xsd > "> > <id>t4-core-all</id> > <formats> > <format>jar</format> > </formats> > <includeBaseDirectory>false</includeBaseDirectory> > <dependencySets> > <dependencySet> > <unpack>true</unpack> > <unpackOptions> > <excludes> > <exclude>META-INF/persistence.xml</exclude> > <exclude>META-INF/ejb-jar.xml</exclude> > </excludes> > </unpackOptions> > <useTransitiveDependencies>false</useTransitiveDependencies> > </dependencySet> > </dependencySets> > <files> > <file> > <source>src/main/assembly/persistence.xml</source> > <outputDirectory>META-INF</outputDirectory> > </file> > <file> > <source>src/main/assembly/ejb-jar.xml</source> > <outputDirectory>META-INF</outputDirectory> > </file> > </files> > </assembly> > > The pom generated for t4-core-all just contains dependencies to > t4-core-utils and t4-core-commons. So when adding t4-core-all as a > dependency, I have all classes twice, in t4-core-all and in t4-core-commons > or t4-core-utils ... Actually what I need is that the pom for t4-core-all > contains transitive dependencies from t4-core-utils and t4-core-commons > (for > example hibernate, commons-lang, etc...), and not dependencies to > t4-core-utils and t4-core-commons. A kind of pom merging. Is there a way to > do this ? > > Thanks in advance, > > Olivier > > > > > -- Seules 2 choses sont infinies : l'univers et la bêtise humaine ; et encore pour l'univers, je ne suis pas sûr … (Einstein)