2016-01-13 9 views
9

Ich werde die Maven-Abhängigkeit com.samaxes.maven # minify-maven-plugin verwenden, um mein Frontend-Projekt zu minimieren. Dieses Frontend-Projekt ist in ein jar (Java-Archiv) gepackt - daher habe ich keine WAR-Datei, weil ich Spring Boot verwende.Minimierte Dateien in jar setzen

Mit der Konfiguration am unteren Rand * .min.js und * .min.css Dateien werden generiert, aber sie sind nicht in JAR-Datei pacakged. Ich habe einige Threads gelesen und habe etwas versucht, aber ohne Erfolg: In der JAR-Datei befinden sich immer noch die unminifizierten css- und js-Dateien.

Hat jemand irgendeinen Hinweis, was ich tun kann. Ich habe viele CSS- und JS-Dateien in meinem Projekt in verschiedenen Ordnerstrukturen und die minimierten Dateien sollten an der gleichen Stelle wie die unminifizierten Dateien platziert werden.

<build> 
<plugins> 
    <plugin> 
    <groupId>com.samaxes.maven</groupId> 
    <artifactId>minify-maven-plugin</artifactId> 
    <version>1.7.4</version> 
    <executions> 
     <execution> 
     <id>default-minify</id> 
     <phase>package</phase> 
     <configuration> 
      <charset>UTF-8</charset> 
      <skipMerge>true</skipMerge> 
      <nosuffix>true</nosuffix> 
      <closureCompilationLevel>WHITESPACE_ONLY</closureCompilationLevel> 
      <webappSourceDir>src/main/resources</webappSourceDir> 
      <cssSourceDir>./</cssSourceDir> 
      <cssTargetDir>./minified</cssTargetDir> 
      <cssSourceIncludes> 
      <cssSourceInclude>**/*.css</cssSourceInclude> 
      </cssSourceIncludes> 
      <cssSourceExcludes> 
      <cssSourceExclude>**/*.min.css</cssSourceExclude> 
      </cssSourceExcludes> 
      <jsSourceIncludes> 
      <jsSourceInclude>**/*.js</jsSourceInclude> 
      </jsSourceIncludes> 
      <jsSourceExcludes> 
      <jsSourceExclude>**/*.min.js</jsSourceExclude> 
      </jsSourceExcludes> 
      <jsEngine>CLOSURE</jsEngine> 
     </configuration> 
     <goals> 
      <goal>minify</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
</plugins> 

[EDIT]

ich bearbeiten haben das Maven Plugin auf diese Weise. Ich muss wirklich src/main/recoures verwenden - es ist eine Spezifikation bei unserem Projekt.

Mein Problem ist jetzt, dass die Dateien in den verschiedenen Ordnern die unter dem Hauptordnerpfad unter public/app minimieren ist, aber die Ordner mit den verkleinerten Dateien auf dem gleichen Niveau sind als meine öffentlichen Ordner sind.

So würde ich so etwas wie dies benötigt:

<webappTargetDir>**public/app/**${project.build.outputDirectory}</webappTargetDir> 

Gibt es eine Möglichkeit, es so zu tun?

<build> 
<plugins> 
    <plugin> 
    <groupId>com.samaxes.maven</groupId> 
    <artifactId>minify-maven-plugin</artifactId> 
    <version>1.7.4</version> 
    <executions> 
     <execution> 
     <id>default-minify</id> 
     <phase>prepare-package</phase><!-- When omitted defaults to 'process-resources' --> 
     <configuration> 
      <charset>UTF-8</charset> 
      <skipMerge>true</skipMerge> 
      <closureCompilationLevel>WHITESPACE_ONLY</closureCompilationLevel> 
      <webappSourceDir>src/main/resources/public/app</webappSourceDir> 
      <webappTargetDir>${project.build.outputDirectory}</webappTargetDir> 
      <cssSourceDir>./</cssSourceDir> 
      <cssSourceIncludes> 
      <cssSourceInclude>**/*.css</cssSourceInclude> 
      </cssSourceIncludes> 
      <jsSourceDir>./</jsSourceDir> 
      <jsSourceIncludes> 
      <jsSourceInclude>**/*.js</jsSourceInclude> 
      </jsSourceIncludes> 
      <jsEngine>CLOSURE</jsEngine> 
     </configuration> 
     <goals> 
      <goal>minify</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 

Mit der minify-Maven-Plugin Konfiguration oben ich die folgenden Ordnerstruktur auf der linken Seite zu bekommen, aber ich würde die Ordnerstruktur auf der rigth Seite benötigen. Gibt es eine Möglichkeit, das zu tun?

Current and needed folder structure

+0

Erste begangen haben sollten Sie die Phase des minify Plugin 'prepare-Versandstücke außerdem sollten Sie nicht ändern benutze 'src/main/resources' und ändere' webappTargetDir' in '$ {project.build.outputDirectory}' (target/classes folder) ...... Wenn du den Ordner 'src/main/resources' verwendest, der kopiert wird während der Ressourcenphase in 'target/classes', was nicht wirklich das ist, was du willst .... – khmarbaise

+0

Danke für die Resonanz. Gibt es eine Möglichkeit, die minimierten Dateien dort zu platzieren, wo sich der ursprüngliche Dateipfad befindet? Danke vielmals! – quma

+1

Was passiert, wenn Sie versuchen, $ {project.build.outputDirectory}/public/app '? – Tunaki

Antwort

8

Die Dateien werden relativ von webappSourceDir zu webappTargetDir kopiert. Wenn die Struktur also übereinstimmen soll, sollten Sie ähnliche Muster für diese verwenden. Bedeutung hat, sollte es

<webappSourceDir>src/main/resources</webappSourceDir> 
<webappTargetDir>${project.build.outputDirectory}</webappTargetDir> 

oder

<webappSourceDir>src/main/resources/public/app</webappSourceDir> 
<webappTargetDir>${project.build.outputDirectory}/public/app</webappTargetDir> 

ich dem Arbeitsbeispiel here

+0

Vielen Dank! Ich hätte noch eine Frage. Wie kann ich verhindern, dass nichtminimierte Dateien in das Glas verpackt werden? – quma

+0

Wenn sie denselben Namen haben, werden sie vom Minifier neu geschrieben. Wenn sie einen anderen Namen haben, müssen Sie sie durch den üblichen Ressourcenausschlussmechanismus ausschließen: https://maven.apache.org/plugins/maven-resources-plugin/examples/include-exclude.html. –