2009-04-03 12 views
3

Momentan versuchen wir, eine kleine App so zu verpacken, dass unser ops-Team viel Zeit hat, sie zu implementieren. Meine Anforderungen sind, dass die Projekte kompiliert und gezippt werden.Maven Assembly generation

Ich führe den Befehl "mvn -DmyProfile clean generate-sources-Paket" von der Kommandozeile und ich habe eine src.xml-Datei erstellt, die angibt, wo welche Datei sollte darüber hinaus die Verwendung von Zip-Format für die Ausgabe zu deklarieren .

Als Ergebnis bekomme ich 2 Dateien in meinem Zielordner, ein Glas und eine Zip-Datei. Die Zip-Datei ist genau so strukturiert, wie ich sie brauche, außer dass meine Property-Dateien nicht mit den richtigen Werten aus dem POM injiziert wurden. Stattdessen sind alle {Variablen} immer noch da. Das Glas auf der anderen Seite scheint die richtigen Werte injiziert zu haben, aber die Struktur des Glases ist nicht die, die ich brauche.

Der Kicker ist dieses Problem tritt auf, nur da ich versucht habe, Java Service Wrapper zu meinem Projekt hinzuzufügen und musste die Datei src.xml haben, um zu deklarieren, wo alle neuen Dateien in der Projektordner-Struktur gehen sollen. Vorher würde der exakt gleiche Befehl perfekt funktionieren und sogar die jar-Struktur war konsistenter mit der tatsächlichen Projektstruktur in Eclipse.

Den Java-Service-Wrapper nicht verantwortlich machen, nur fragen, wenn ich versuche, alles für dieses Stück arbeiten zu lassen, habe ich keinen Konflikt mit der MVN-Assembly erstellt.

Jede Hilfe wird sehr geschätzt.

Danke, Yann

+0

Gibt es eine Chance, Sie könnten die relevanten Teile Ihres Pom einfügen (verwenden Sie Dummy-Werte, falls erforderlich). – whaley

Antwort

0

Ok, also habe ich die Antwort auf mein zweites Problem gefunden. Der Maven-Befehl falsch war, was ich erfolgreich ausgeführt wurde:

mvn clean package -P env-prod 

Und das setzte die richtigen Werte an die richtigen Stellen in meinen Konfigurationsdateien. Beachten Sie die Verwendung des Schalters -P anstelle von -D, um das Profil auszuwählen.

+1

-D definiert eine Eigenschaft, die optional zum Auslösen eines zu aktivierenden Profils verwendet werden kann. -P aktiviert direkt ein Profil, unabhängig davon, was für Aktivierungsregeln in der pom.xml vorhanden ist –

1

So stellt sich heraus Maven einen "Schnappschuss" jar erstellt, die in den lib-Ordner innerhalb des Zip-Archiv enthalten wird. Dieser Snapshot-Jar enthält die Konfigurationsdateien mit den richtigen Werten. Mit anderen Worten, wenn Sie Ihre Konfigurationsdateien mit dem Klassenlader anstelle einer Dateisystemreferenz laden, sollte es funktionieren.

In jedem Fall wurde mir gesagt, dass ich die Konfigurationsdateien nicht in die Wurzel des Zip-Archivs legen soll. Die Konfigurationsdateien, die Maven gerade ins Archiv geschoben hat, ohne sie zu injizieren, sollten in meinem Fall gar nicht erst da sein.

Aber hier ist der neue Inhalt meiner src.xml-Datei, die in der pom.xml enthalten wird:

<assembly> 
<id>bin</id> 
<includeBaseDirectory>false</includeBaseDirectory> 
<formats> 
    <format>zip</format> 
</formats> 
<fileSets> 
    <fileSet> 
     <directory>src/main/bin</directory> 
     <outputDirectory>/bin</outputDirectory> 
     <includes> 
      <include>**/*.sh</include> 
     </includes> 
     <fileMode>777</fileMode> 
    </fileSet> 
    <fileSet> 
     <directory>lib</directory> 
     <outputDirectory>/lib</outputDirectory> 
     <includes> 
      <include>**/*.jar</include> 
     </includes> 
    </fileSet> 
    <!-- Wrapper files --> 
    <fileSet> 
     <directory>lib/wrapper</directory> 
     <outputDirectory>/lib</outputDirectory> 
     <includes> 
      <include>**/*</include> 
     </includes> 
    </fileSet> 
    <fileSet> 
     <directory>src/main/bin/wrapper</directory> 
     <outputDirectory>/bin/wrapper</outputDirectory> 
     <includes> 
      <include>**/*</include> 
     </includes> 
     <fileMode>777</fileMode> 
    </fileSet> 
    <fileSet> 
     <directory>src/main/conf</directory> 
     <outputDirectory>conf</outputDirectory> 
     <includes> 
      <include>**/*</include> 
     </includes> 
    </fileSet> 
</fileSets> 
<dependencySets> 
    <dependencySet> 
     <outputDirectory>/lib</outputDirectory> 
     <includes> 
      <include>*:jar:*</include> 
     </includes> 
     <excludes> 
      <exclude>*:sources</exclude> 
     </excludes> 
    </dependencySet> 
</dependencySets></assembly> 

Das immer noch ein Glas gibt und ein Zip-Archiv, aber da die zip enthält das Glas snapshot Alles sollte jetzt in Ordnung sein.

AUSSER ... (und das für einen anderen Beitrag sein könnte, so lassen Sie mich wissen, wenn ich Thema für diese Frage ab)

dass die in den Konfigurationsdateien injiziert Werte sind nicht die, die aus dem Profil innerhalb meine POM.xml. Sie stammen aus meiner settings.xml, die sich in meinem .m2-Ordner befindet. Aber Drehen der Aktivierung in der settings.xml Profil off scheint nicht das Problem zu lösen:

<activation> 
<activeByDefault>false</activeByDefault> 
</activation> 

Auch hier wird die Befehlszeile Ich betreibe:

mvn -Denv-prod clean generate-sources package 

Wo „env-prod“ ist das Profil in der pom.xml, das die zu injizierenden Werte enthält.

Irgendeine Idee?

Verwandte Themen