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

Reply via email to