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.java
insrc/main/javaTemplates/mypackage
directory:package mypackage; import java.util.Iterator; public interface CharIterator extends Iterator<Character> { char nextChar(); }
-
Run
mvn compile
-
[For IntelliJ users] Right click on
pom.xml
in project explorer → Maven → Reimport -
Open
target/generated-sources/jpsg/mypackage
directory in project explorer and enjoyByteIterator
..DoubleIterator
specializations!
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