Advanced Maven Plugin Usage

If you need to process more than one directory of classes, you can specify multiple fileSets like this:

<build>
    <plugins>
        <plugin>
            <groupId>io.smallrye</groupId>
            <artifactId>jandex-maven-plugin</artifactId>
            <version>${version.jandex}</version>
            <executions>
                <execution>
                    <id>make-index</id>
                    <goals>
                        <goal>jandex</goal>
                    </goals>
                    <configuration>
                        <fileSets>
                            <fileSet>
                                <directory>${project.build.directory}/generated-classes/foo</directory>
                            </fileSet>
                            <fileSet>
                                <directory>${project.build.directory}/generated-classes/bar</directory>
                            </fileSet>
                        </fileSets>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

To turn off processing of target/classes, add the following configuration:

<processDefaultFileSet>false</processDefaultFileSet>

For any fileSet, you can also fine-tune the classes that are processed using the following options:

<fileSet>
    <directory>${project.build.directory}/somedir</directory>
    <!-- included globs -->
    <includes>
        <include>**/indexed/*.class</include>
        <include>**/idxd/*.class</include>
    </includes>
    <!-- excluded globs -->
    <excludes>
        <exclude>**/*NotIndexed.class</exclude>
    </excludes>
    <!-- normally true, this excludes things like the CVS/ and .svn/ directories, log files, etc. -->
    <useDefaultExcludes>false</useDefaultExcludes>
</fileSet>

A fileSet may specify a dependency instead of a directory. That dependency must exist among the set of dependencies of the Maven project being built. A groupId and artifactId are mandatory, a classifier is optional:

<fileSet>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>my-project</artifactId>
    </dependency>
    <includes>
        <include>com/example/my/project/api/**/*.class</include>
    </includes>
    <excludes>
        <exclude>com/example/**/_private/*.class</exclude>
    </excludes>
</fileSet>

Index Location and Version

To change where the persistent index is located, the indexDir and indexName configuration properties can be used.

These properties should be left unchanged. Jandex consumers typically look for a persistent Jandex index in the default location.

The indexDir property defaults to ${project.build.outputDirectory}/META-INF (so target/classes/META-INF by default), while indexName defaults to jandex.idx. Therefore, the index is by default stored to target/classes/META-INF/jandex.idx.

This example moves the index to target/classes/index.dat:

<plugin>
    <groupId>io.smallrye</groupId>
    <artifactId>jandex-maven-plugin</artifactId>
    <version>${version.jandex}</version>
    <executions>
        <execution>
            <id>make-index</id>
            <goals>
                <goal>jandex</goal>
            </goals>
            <configuration>
                <indexDir>${project.build.outputDirectory}</indexDir>
                <indexName>index.dat</indexName>
            </configuration>
        </execution>
    </executions>
</plugin>

The indexVersion property can be used to produce an older index version. By default, the index version produced is the latest version supported by the Jandex version. Possible values of the indexVersion property can be found in the table of persistent index format versions.

It is usually best to leave the index version unchanged. Exercise care when upgrading Jandex itself.