Kotlin中启动Hazelcast遇权限警告,如何通过Maven自动配置解决?
解决Kotlin+Maven环境下Hazelcast模块权限警告的配置方案
你之前配置的javacOptions是编译阶段的参数,而Hazelcast需要的是运行阶段的JVM模块访问参数,所以之前的配置完全没作用。下面是几个可行的Maven配置方案,能让项目克隆后直接运行无需手动传参:
方案1:用exec-maven-plugin直接运行项目
这个插件专门用来在Maven中执行Java/Kotlin程序,能直接配置运行时的JVM参数。在pom.xml中添加以下配置:
<build> <plugins> <!-- 保留你已有的其他插件配置 --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>3.1.0</version> <configuration> <!-- 替换成你的Kotlin主类全限定名,比如com.example.MainKt --> <mainClass>你的主类全限定名</mainClass> <!-- 替换成Hazelcast提示的具体JVM参数,示例为常见的模块权限参数 --> <jvmArguments>--add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED</jvmArguments> </configuration> <executions> <execution> <goals> <goal>java</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
之后直接执行mvn exec:java就能带参数启动项目,警告会自动消失。
方案2:打包成可执行JAR并配套运行配置
如果需要打包成可执行JAR,除了配置主类,还可以结合exec插件保证直接运行的便利性,同时用maven-shade-plugin处理依赖打包:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>你的主类全限定名</mainClass> </transformer> </transformers> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> </configuration> </execution> </executions> </plugin> <!-- 配套exec插件用于直接运行 --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>3.1.0</version> <configuration> <mainClass>你的主类全限定名</mainClass> <jvmArguments>--add-opens java.base/java.nio=ALL-UNNAMED</jvmArguments> </configuration> </plugin> </plugins> </build>
打包后可以用mvn exec:java直接运行,或者如果需要用java -jar启动,建议写一个简单的bat/sh脚本,把JVM参数内嵌进去,方便其他人直接执行。
方案3:测试阶段消除警告(如果是测试时出现)
如果警告是在运行单元测试时触发的,需要配置maven-surefire-plugin的argLine参数:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.1.2</version> <configuration> <argLine>--add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED</argLine> </configuration> </plugin> </plugins> </build>
这样执行mvn test时,测试进程会自动带上这些JVM参数,消除警告。
内容的提问来源于stack exchange,提问作者alturkovic
相关产品推荐
相关产品推荐

