2016-01-13 17 views
9

Userò la dipendenza Maven com.samaxes.maven # minify-maven-plugin per minimizzare il mio progetto di frontend. Questo progetto di frontend è impacchettato in un jar (archivio java), quindi non ho file di guerra perché utilizzo Spring boot.Inserire i file minificati nel barattolo

Con la configurazione nella parte inferiore, i file * .min.js e * .min.css vengono generati ma non vengono memorizzati nel file jar. Ho letto alcuni thread e ho provato qualcosa ma senza successo: nel file JAR ci sono ancora i file css e js non ancora terminati.

Qualcuno ha qualche suggerimento su cosa posso fare. Ho molti file css e js nel mio progetto in diverse strutture di cartelle e i file minificati devono essere collocati nello stesso posto come lo sono i file non miniati.

<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]

ho modificare il plugin Maven in questo modo. Devo davvero usare src/main/recoures - è una specifica del nostro progetto.

Il mio problema ora è che i file nelle diverse cartelle Unter sotto il percorso della cartella principale pubblica/app sono ridotte di MA le cartelle con i file minified sono allo stesso livello del mio cartella pubblicaè.

Quindi avrei bisogno di qualcosa di simile:

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

C'è la possibilità di farlo in questo modo?

<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> 

Con la configurazione diminify-maven-plugin sopra ottengo il seguente struttura delle cartelle sul lato sinistro, ma avrei bisogno la struttura delle cartelle sul lato rigth. C'è qualche possibilità di farlo?

Current and needed folder structure

+0

primo luogo si dovrebbe cambiare la fase di plug minify a 'preparare-package', inoltre, non si dovrebbe usa 'src/main/resources' e cambia' webappTargetDir' in '$ {project.build.outputDirectory}' (cartella target/classes) ...... Se usi la cartella 'src/main/resources' che è copiata durante la fase delle risorse in 'target/classes' che non è proprio quello che vuoi .... – khmarbaise

+0

Grazie per la risposta. c'è qualche possibilità di posizionare i file minificati dove è il percorso del file originale? Molte grazie! – quma

+1

Cosa succede se provi ' $ {project.build.outputDirectory}/public/app'? – Tunaki

risposta

8

I file vengono copiati relativamente da webappSourceDir a webappTargetDir. Quindi, se vuoi che la struttura corrisponda, dovresti usare modelli simili per quelli. Significato, dovrebbe essere

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

o

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

Ho commesso l'esempio di lavoro here

+0

Grazie mille! Avrei un'altra domanda. Come posso evitare di impacchettare i file non miniati in barattolo. – quma

+0

Se hanno lo stesso nome, verranno riscritti dal minificatore. Se hanno il nome diverso, dovrai escluderli dal solito meccanismo di esclusione delle risorse: https://maven.apache.org/plugins/maven-resources-plugin/examples/include-exclude.html. –

Problemi correlati