2009-10-12 5 views
8

Wie können generierte Build-Artefakte aus Mavens Zielverzeichnis entfernt werden? Maven erzeugt eine JAR- oder WAR-Datei zum Zielverzeichnis. Ich möchte diese Datei entfernen, nachdem Maven die Datei jar/war im lokalen Repository installiert hat (nachdem maven das Ziel 'install' ausgeführt hat). Das Entfernen kann entweder bei Installationsziel oder separatem Ziel, das ich manuell ausführe, geschehen.Wie können generierte Build-Artefakte aus Mavens Zielverzeichnis entfernt werden?

Hinweis, dass ich andere Teile des Zielverzeichnisses intakt lassen möchte, z. B. Ziel/Site und Ziel/todsichere Berichte.

+1

Aus Neugier, was ist der Grund dafür? –

+0

Ich habe das schon einmal gesehen, wenn jemand ein Artefakt wie eine NSIS-Exe-Datei erstellen möchte, aber den Jar-Artifact-Typ verwendet, weil es eine geeignete Menge von Lebenszyklusbindungen hat oder wenn sie sich nicht um das Intermediate-Artefakt kümmern (zB die jar-Datei, aus der die exe erzeugt wird.) –

+0

Im Grunde läuft der Maven-Build in einem Continuous-Integration-Server, und ich bin nur an Berichten und Zeug interessiert, die auf lokalen Repo installiert werden. Der Rest der Dateien verschwendet nur Platz und meine JAR-Dateien sind ziemlich groß. –

Antwort

18

einfach die saubere Plugin und eine Ausführung nach der Installationsphase auszuführen:

<plugin> 
    <artifactId>maven-clean-plugin</artifactId> 
    <version>2.2</version> 
    <executions> 
     <execution> 
     <id>auto-clean</id> 
     <phase>install</phase> 
     <goals> 
      <goal>clean</goal> 
     </goals> 
     <configuration> 
      <filesets> 
      <fileset> 
       <directory>${project.build.outputDirectory}</directory> 
       <includes> 
       <include>**/*.jar</include> 
       </includes> 
      </fileset> 
      </filesets> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
+0

+1 für den Filter, aber das Verzeichniselement sollte $ {project.build.outputDirectory} sein, um überschriebene Werte zuzulassen –

+5

Ich musste nur ein bestimmtes Verzeichnis aus den Ergebnissen löschen. Seit Version 2.3 löscht das Plugin standardmäßig das gesamte Verzeichnis, sofern Sie nicht die Eigenschaft excludeDefaultDirectories im -Tag angeben. – Danny

0

In Maven ist nichts eingebaut, das das tun kann. Sie können das antrun-Plugin verwenden, um nach der Installation ein Ant-Skript auszuführen, das das Artefakt löscht, oder das exec-Plug-in verwenden, um das Artefakt mithilfe der Befehlszeile zu löschen oder ein eigenes Plug-in zu schreiben.

Ich schlage vor, es gibt wenig Wert, wenn überhaupt, irgendwelche dieser Dinge zu tun. Maven wurde entwickelt, um Zwischen- und End-Artefakte in target zu platzieren, um Folge-Builds effizienter zu machen. Der Grund dafür, dass dafür noch nichts verfügbar ist, ist ein Hinweis darauf, dass dies von geringem Wert ist. Wenn es für Sie von Wert ist, haben Sie ein paar Optionen.

+1

Nun, das ist einfach nicht wahr. Siehe Domis Antwort. Nachdem ich das gesagt habe, frage ich mich immer noch, warum sollte ich das tun? –

0

Ich weiß, ich bin ein wenig spät. Aber ich vermute, das Problem war, dass ein Maven-Projekt die Artefakte automatisch archiviert. In meinem Fall habe ich die automatische Archivierung deaktiviert und die Artefakte nur manuell mit den Post-Build-Aktionen archiviert. Auf diese Weise werden nur die Artefakte archiviert, an denen ich interessiert bin. Ich bin bereit, die generierten Artefakte auf der Festplatte zu belassen, bis der nächste Build ausgeführt wird.