3.7 KiB
3.7 KiB
Maven Plugin Configuration Options
Contents
- Plugin goals
- Configuration options
- Build arguments
- Common buildArg flags
- Parent POM inheritance
- Shaded JAR support
- Full example
Configuration options
| Option | Type | Default | Purpose |
|---|---|---|---|
<imageName> |
String | artifactId | Name of the output executable |
<mainClass> |
String | — | Entry point class (required) |
<debug> |
boolean | false |
Generate debug info |
<verbose> |
boolean | false |
Enable verbose build output |
<fallback> |
boolean | false |
Allow fallback to JVM |
<sharedLibrary> |
boolean | false |
Build shared library instead of executable |
<quickBuild> |
boolean | false |
Faster build, lower runtime performance |
<useArgFile> |
boolean | true |
Use argument file for long classpaths |
<skipNativeBuild> |
boolean | false |
Skip native compilation |
<skipNativeTests> |
boolean | false |
Skip native test execution |
<buildArgs> |
List | empty | Arguments passed directly to native-image |
<jvmArgs> |
List | empty | JVM arguments for the native-image builder |
<runtimeArgs> |
List | empty | Arguments passed to the app at runtime |
<environment> |
Map | empty | Environment variables during build |
<systemPropertyVariables> |
Map | empty | System properties during build |
<classpath> |
List | auto | Override classpath entries |
<classesDirectory> |
String | auto | Override classes directory |
Build arguments
Pass any native-image flag via <buildArgs>:
<buildArgs>
<buildArg>--initialize-at-run-time=com.example.LazyClass</buildArg>
<buildArg>-H:IncludeResources=.*\.xml$</buildArg>
<buildArg>-O2</buildArg>
</buildArgs>
Common buildArg flags
If a class must not initialize at build time:
<buildArg>--initialize-at-run-time=<class-or-package></buildArg>
If a class must initialize at build time:
<buildArg>--initialize-at-build-time=<class-or-package></buildArg>
If the build runs out of memory:
<jvmArgs>
<arg>-Xmx8g</arg>
</jvmArgs>
If you need to include resource files:
<buildArg>-H:IncludeResources=.*\.(properties|xml)$</buildArg>
If you want to inspect build details:
<buildArg>--diagnostics-mode</buildArg>
If you want fastest build time (dev iteration):
<buildArg>-Ob</buildArg>
Parent POM inheritance
Child projects can append build arguments to a parent POM config using combine.children:
<buildArgs combine.children="append">
<buildArg>--verbose</buildArg>
</buildArgs>
Shaded JAR support
If using maven-shade-plugin, point the native plugin to the shaded JAR:
<configuration>
<useArgFile>false</useArgFile>
<classpath>
<param>${project.build.directory}/${project.artifactId}-${project.version}-shaded.jar</param>
</classpath>
</configuration>
Full example
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<version>0.11.1</version>
<extensions>true</extensions>
<executions>
<execution>
<id>build-native</id>
<goals>
<goal>compile-no-fork</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
<configuration>
<imageName>myapp</imageName>
<mainClass>com.example.Main</mainClass>
<verbose>true</verbose>
<buildArgs>
<buildArg>--initialize-at-run-time=com.example.Lazy</buildArg>
<buildArg>-H:IncludeResources=.*\.properties$</buildArg>
<buildArg>-O2</buildArg>
</buildArgs>
<jvmArgs>
<arg>-Xmx8g</arg>
</jvmArgs>
</configuration>
</plugin>