Essa documentação tem como objetivo explicar como é feita a configuração do plugin Closure compiler Maven Plugin
Hoje no Fluig plataforma utiliza-se o plugin YUI compressor para minificar arquivos CSS e JS. Porém o mesmo permanece inativo e sem atualização desde 2013 ficando um pouco ultrapassado e nos impossibilitando de utilizar novas tecnologias, como o ES6.
Não será possível remover completamente o YUI-Compressor de nosso produto pois o Closure Compiler não irá processar arquivos CSS, apenas JS. Sendo necessário a permanência do antigo para minificar a folha de estilo.
Os plugins são configurados nos pom.xml de cada projeto. Primeiramente devemos fazer com que o YUI-Compressor pare de minificar os arquivos JS para isso na configuração já existente precisamos adicionar a seguinte tag dentro da configuração.
<configuration>
…
<excludes>
<exclude>**/*.js</exclude>
</excludes>
…
</configuration> |
Feito isso podemos configurar o Closure Compiler.
<plugin>
<groupId>com.github.blutorange</groupId>
<artifactId>closure-compiler-maven-plugin</artifactId>
<executions>
<execution>
<id>default-minify</id>
<goals>
<goal>minify</goal>
</goals>
<phase>generate-resources</phase>
</execution>
</executions>
<configuration>
<skip>true</skip>
<baseSourceDir>${project.basedir}/src</baseSourceDir>
<encoding>UTF-8</encoding>
<sourceDir>main/webapp/resources</sourceDir>
<targetDir>resources</targetDir>
<includes>**/*.js</includes>
<outputFilename>#{path}/#{basename}.#{extension}</outputFilename>
<excludes>**/${project.basedir}</excludes>
<excludes>**/*.min.js</excludes>
<excludes>**/*-min.js</excludes>
<closureCompilationLevel>SIMPLE_OPTIMIZATIONS</closureCompilationLevel>
<closureWarningLevels>
<undefinedVars>OFF</undefinedVars>
<duplicate>OFF</duplicate>
<duplicateMessage>OFF</duplicateMessage>
<es5Strict>OFF</es5Strict>
<checkVars>OFF</checkVars>
</closureWarningLevels>
<closureEmitUseStrict>false</closureEmitUseStrict>
<closureRewritePolyfills>false</closureRewritePolyfills>
<closureLanguageOut>NO_TRANSPILE</closureLanguageOut>
<skipMinify>false</skipMinify>
<skipMerge>true</skipMerge>
</configuration>
</plugin> |
O plugin é declarado dentro do profile "onlyminify" do pom.xml. No build de desenvolvimento o skipMinify é true. Para evitar que em nosso dia a dia o tempo de compilação seja maior do que o necessário. |
A documentação do mesmo pode ser acessada aqui: https://blutorange.github.io/closure-compiler-maven-plugin/minify-mojo.html
Onde há a explicação de cada tag utilizada - abaixo estará a explicação de algumas configurações específicas.
Atualmente, caso o plugin não encontre um js dentro do source dir definido ele quebra. Por isso, em projetos onde o pom pai não possui arquivos a serem minificados passamos o skip como true. Porém é necessário que em seus filhos haja a configuração:
|