Announcement

Collapse
No announcement yet.

Maven zip packaging

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Maven zip packaging

    Moin zusammen,

    eine Fremdsoftware, die ich betreue, wird neuerdings in Form von Maven Artifakten ausgeliefert. Die einzelnen Komponenten werden dabei mit Hilfe des assembly Plugins zu zip-Dateien paketiert.

    Unsere Anpassungen sehen im Großen und Ganzen so aus, dass wir bei jeder Komponente ein paar Konfigurationsdateien überschreiben. Nun zu meiner Frage: Kennt jemand eine Art Pattern mit der sich sowas bewerkstelligen lässt?

    Ich habe schon versucht, ein neues Maven-Projekt anzulegen, das ausgelieferte Projekt als Dependency hinzuzufügen und mit Hilfe des "maven-dependency-plugins" das zip wieder zu entpacken. Das funktioniert soweit auch ganz gut. Auch das paketieren zusammen mit den angepassten Konfigurationsdateien funktioniert noch. Allerdings enthält das gebaute Zip am Ende die Dateien in beiden Versionen (d. h. Wenn ich versuche das zip in einen leeren Ordner zu entpacken, fragt win-zip mich, ob ich die Dateien überschreiben will - ich hätte nicht mal gedacht, dass das möglich ist, die gleiche Datei doppelt in einem ZIP Archiv abzulegen).


    Hier erstmal meine pom.xml und meine resources.xml (für das assembly plugin):
    pom.xml:
    Code:
    <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>my.group.id</groupId>
        <artifactId>my.artifact.id</artifactId>
        <version>1.0</version>
    		<packaging>pom</packaging>
        
        <dependencies>
          <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>my.parents.artifact.id</artifactId>
            <version>1.0</version>
            <type>zip</type>
            <!-- Make sure this isn't included on any classpath-->
            <scope>provided</scope>
          </dependency>
        </dependencies>
        
        <build>
        	<finalName>customized</finalName>
            <resources>
            <resource>
                <directory>${basedir}/src/main/resources</directory>
            </resource>
            <resource>
                <directory>${project.build.directory}/generated-resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <executions>
                      <execution>
                        <id>unpack-shared-resources</id>
                        <goals>
                          <goal>unpack-dependencies</goal>
                        </goals>
                        <phase>generate-resources</phase>
                        <configuration>
                           <outputDirectory>${project.build.directory}/generated-resources</outputDirectory>
                          <includeArtifacIds>my.parents.artifact.id</includeArtifacIds>
                          <includeGroupIds>${project.groupId}</includeGroupIds>
                          <excludeTransitive>true</excludeTransitive>
                          <!--use as much as needed to be specific...also scope,type,classifier etc-->
                        </configuration>
                      </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>2.2-beta-2</version>
                    <executions>
                        <execution>
                            <id>make shared resources</id>
                            <goals>
                                <goal>single</goal>
                            </goals>
                            <phase>package</phase>
                            <configuration>
                                <descriptors>
                                    <descriptor>${basedir}/src/main/assembly/resources.xml</descriptor>
                                </descriptors>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </project>
    und die resources.xml:
    Code:
    ´<assembly>
      <id>build</id>
      <formats>
        <format>zip</format>
      </formats>
      <includeBaseDirectory>true</includeBaseDirectory>
      <fileSets>
        <fileSet>
          <directory>src/main/resources</directory>
          <outputDirectory></outputDirectory>
        </fileSet>
        <fileSet>
          <directory>${project.build.directory}/generated-resources</directory>
          <outputDirectory></outputDirectory>
        </fileSet>
      </fileSets>
    </assembly>
    Hat jemand von euch eine Idee, wie sich das mit Maven Mitteln lösen ließe? Oder ein Pattern für solche Fälle? Es ließe sich doch sicher lösen, indem man die angepassten Konfigurationsdateien per Ant über das entpackte ZIP kopiert und nur dieses wieder packt. Aber ich habe gehofft, dass es noch eine schönere Lösung gibt.

    Vielen Dank schon mal

    Sjard Ole

  • #2
    RE: Maven zip packaging

    Nur so zur Info:

    Ich habe das jetzt mit dem Ant Plugin realisiert. Das funktioniert auch ganz gut.

    so far...

    Comment

    Working...
    X