Introduction

Here you will find several use-cases and implementation examples.

Use a Custom Resource Processor

If you have a use-case, where you need to run a single custom processor (called !MyCustomPostProcessor) on all resources found in the model, you have to follow these steps:

Create a custom WroManagerFactory

This code applies for the wro4j versions >= 1.3.6

  public class MyCustomWroManagerFactory
    extends DefaultStandaloneContextAwareManagerFactory{
    @Override
    protected ProcessorsFactory newProcessorsFactory() {
      SimpleProcessorsFactory factory = (SimpleProcessorsFactory) super.newProcessorsFactory();
      factory.addPostProcessor(new MyCustomPostProcessor());  
    }
  }

Note: If you are using 1.2.x branch, then instead of DefaultStandaloneContextAwareManagerFactory use DefaultMavenContextAwareManagerFactory.

As you can see, we just override the method responsible for processors configuration. Here you can add any processors you want (custom or existing ones).

Update pom.xml configuration

<plugin>
    <groupId>ro.isdc.wro4j</groupId>
    <artifactId>wro4j-maven-plugin</artifactId>
    <version>${wro4j.version}</version>
    <executions>
      <execution>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
    <configuration>          
        <wroManagerFactory>com.mycompany.MyCustomWroManagerFactory</wroManagerFactory>
    </configuration>
</plugin>

Alternatively, you can set the wroManagerFactory when explicitly running plugin:

  mvn wro4j:run -DwroManagerFactory=com.mycompany.MyCustomWroManagerFactory

There are several existing implementations of manager factories you can use for maven plugin are: ro.isdc.wro.extensions.manager.standalone.GoogleStandaloneManagerFactory ro.isdc.wro.extensions.manager.standalone.YUIStandaloneManagerFactory

Example

This example will show how you can easily use google closure with advanced optimization mode (the existing factory GoogleStandaloneManagerFactory uses simple optimization mode).

Based on documentation about the customization, you can easily provide a custom processor in the wro4j maven plugin flow. Integrating google closure with advanced optimization is simple as:

Create custom wro manager factory

  public class GoogleClosureAdvancedWroManagerFactory
    extends DefaultStandaloneContextAwareManagerFactory{
    @Override
    protected ProcessorsFactory newProcessorsFactory() {         
      SimpleProcessorsFactory factory = (SimpleProcessorsFactory) super.newProcessorsFactory();
      factory.addPostProcessor(new GoogleClosureCompressorProcessor(CompilationLevel.ADVANCED_OPTIMIZATIONS));  
    }
  }

Update wro4j maven plugin configuration

<plugin>
    <groupId>ro.isdc.wro4j</groupId>
    <artifactId>wro4j-maven-plugin</artifactId>
    <version>${wro4j.version}</version>
    <executions>
      <execution>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
    <configuration>          
        <wroManagerFactory>com.mycompany.GoogleClosureAdvancedWroManagerFactory</wroManagerFactory>
    </configuration>
</plugin>

Alternatively, you can set the wroManagerFactory when explicitly running plugin:

  mvn wro4j:run -DwroManagerFactory=com.mycompany.GoogleClosureAdvancedWroManagerFactory