A Maven plugin for Java Primitive Specializations Generator
- 
Add to your
pom.xml:<build> <plugins> <!-- other plugins... --> <plugin> <groupId>io.timeandspace</groupId> <artifactId>jpsg-maven-plugin</artifactId> <version>1.4</version> <executions> <execution> <id>jpsg</id> <goals> <goal>jpsg</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
 - 
Create file
CharIterator.javainsrc/main/javaTemplates/mypackagedirectory:package mypackage; import java.util.Iterator; public interface CharIterator extends Iterator<Character> { char nextChar(); }
 - 
Run
mvn compile - 
[For IntelliJ users] Right click on
pom.xmlin project explorer → Maven → Reimport - 
Open
target/generated-sources/jpsg/mypackagedirectory in project explorer and enjoyByteIterator..DoubleIteratorspecializations! 
See the JPSG repository for more info about how to use the generator.
For all template files without /* with */ blocks in the beginning JPSG attempts to deduce
dimensions from the name of the template file, taking possible options from this defaultTypes
configuration. See more details in
the section about /* with */ blocks in JPSG tutorial.
Type: String. 
Format: <javaTypeOptions>. 
Default value: byte|char|short|int|long|float|double.
Example:
<configuration>
  <defaultTypes>int|long|float|double</defaultTypes>
</configuration>The source directory which JPSG traverses and considers all files in it as template files.
Type: File. 
Default value: ${basedir}/src/main/javaTemplates.
You can generate test sources by using multiple plugin executions and build-helper-maven-plugin,
see an example in jpsg-maven-plugin-test/pom.xml.
The target directory where JPSG puts specialized sources.
Type: File. 
Default value: ${project.build.directory}/generated-sources/jpsg.
jpsg-maven-plugin-test/pom.xml includes an example of setting a
different target directory for a JPSG execution.
For all dimensions defined in the beginnings of template files in /* with */ blocks, or deduced
automatically by JPSG (see defaultTypes configuration above), or defined inside
template files at any level of nesting, JPSG will skip generating code for the specified options.
Type: List<String>. 
Format: <options>. 
Default value: none (empty list).
Examples:
<configuration>
  <never>
    <never>byte|short|char</never>
    <never>Assert</never>
  </never>
</configuration>Alternative:
<configuration>
  <never>byte|short|char|Assert</never>
</configuration>JPSG doesn't generate specialization files for dimension contexts (either determined by
/* with */ blocks in the
beginnings of the template files, or deduced using defaultTypes) that match any of the conditions
configured via excludes. See more details
in the description of the equivalent method JpsgTask.exclude() for the JPSG Gradle plugin.
Type: List<String>. 
Format: <simple-condition>. 
Default value: none (empty list).
Example:
<configuration>
  <excludes>
    <exclude>object key byte|short|char|object value</exclude>
    <exclude>byte key short|char value</exclude>
    <exclude>Disabled extraChecks Enabled advancedStatistics</exclude>
  </excludes>
</configuration>JPSG adds the provided dimensions to the generation contexts in each template file. Each dimension
must have a single option. See more details in
the description of the equivalent method JpsgTask.with() for the JPSG Gradle plugin.
Type: List<String>. 
Format: <dimensions>. Every
dimension must have only a single option. 
Default value: none (empty list).
Examples:
<configuration>
  <with>
    <with>Enabled extraChecks Disabled advancedStatistics</with>
    <with>Assert extraCheckStyle</with>
    <with>java8 minSupportedJavaVersion</with>
  </with>
</configuration>Alternative:
<configuration>
  <with>Enabled extraChecks Disabled advancedStatistics Assert extraCheckStyle java8 minSupportedJavaVersion</with>
</configuration>Maven 3.0 or newer, OpenJDK 1.8 or newer as the Maven's runtime