Complete Guide to Passing JVM Arguments via Maven Command Line

Nov 28, 2025 · Programming · 14 views · 7.8

Keywords: Maven | JVM Arguments | MAVEN_OPTS | Spring Boot | Plugin Configuration

Abstract: This article provides a comprehensive exploration of various methods for passing JVM arguments during Maven builds, focusing on global configuration using MAVEN_OPTS environment variable and detailed analysis of parameter configuration techniques for specific Maven plugins. Through practical code examples, it demonstrates proper JVM argument settings in commonly used plugins like Spring Boot, Surefire, and Failsafe, while comparing applicable scenarios and considerations of different configuration approaches, offering complete practical guidance for Java developers.

Introduction

In Java development, Maven serves as the mainstream build tool, and its integration with JVM argument configuration represents a frequent technical challenge for developers. Based on high-scoring Stack Overflow answers and authoritative technical documentation, this article systematically analyzes various methods for passing JVM arguments through Maven.

Global JVM Argument Configuration

The MAVEN_OPTS environment variable stands as the preferred solution for global JVM argument configuration. This variable is specifically designed to pass additional JVM startup parameters to the Maven build process, applicable to all Maven command execution environments.

Unix/Linux System Configuration

In Unix-like systems, the MAVEN_OPTS environment variable can be set through terminal commands:

export MAVEN_OPTS="-Xms256m -Xmx512m -XX:PermSize=128m"

This configuration sets the JVM's initial heap size to 256MB, maximum heap size to 512MB, and permanent generation initial size to 128MB. After configuration, any Maven command execution will automatically apply these parameters.

Windows System Configuration

In Windows operating systems, configuration must be performed through the system properties dialog:

  1. Press WinKey + Pause to open System Properties
  2. Select "Advanced system settings"
  3. Click the "Environment Variables" button
  4. Create a new MAVEN_OPTS variable in the User variables section
  5. Set the variable value to desired JVM arguments, for example: -Xms256m -Xmx512m

Plugin-Specific JVM Argument Configuration

When Maven plugins need to launch independent JVM processes, global MAVEN_OPTS configuration becomes ineffective. In such cases, JVM arguments must be specifically specified in the plugin configuration.

Spring Boot Plugin Configuration

The Spring Boot Maven plugin accepts JVM arguments through the jvmArguments configuration item:

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <version>3.3.0</version>
  <configuration>
    <jvmArguments>--add-opens java.base/java.util=ALL-UNNAMED</jvmArguments>
  </configuration>
</plugin>

This configuration approach is particularly suitable for scenarios requiring handling of Java module system reflection access restrictions.

Testing Plugin Configuration

Both Maven Surefire plugin (for unit testing) and Failsafe plugin (for integration testing) use the argLine configuration item:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>3.3.0</version>
  <configuration>
    <argLine>--add-opens=java.base/java.util=ALL-UNNAMED</argLine>
  </configuration>
</plugin>

Configuration Method Comparison Analysis

Different JVM argument configuration methods have their respective applicable scenarios:

Practical Recommendations and Considerations

In actual project development, it's recommended to choose appropriate configuration methods based on specific requirements:

  1. For team development projects, prioritize plugin configuration in pom.xml for easier version management
  2. Personal development environments can use MAVEN_OPTS for convenient global configuration
  3. Pay attention to JVM argument support differences across Java versions, particularly module system-related parameters in Java 9 and above
  4. Ensure all necessary JVM arguments are correctly configured for production environment deployment

Conclusion

Passing JVM arguments through Maven represents fundamental skills in Java development. The MAVEN_OPTS environment variable provides a simple and effective global configuration solution, while plugin-specific configuration items can meet more refined control requirements. Developers should select the most suitable configuration approach based on specific scenarios, ensuring applications achieve optimal performance and stability across different environments.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.