You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

ModiTect与Jlink无法找到模块依赖问题求助

解决jlink找不到自有模块化JAR的问题

我之前也踩过模块化项目里jlink找不到依赖模块的坑,结合你的情况,咱们一步步排查解决:

1. 先确认自有模块的基础配置是否正确

首先检查你写的tech.flexpoint.dashmancommon模块的module-info.java

  • 确保模块名称和依赖它的tech.flexpoint.dashmanserverrequires声明的完全一致(大小写、拼写不能有任何差错,Java模块化对名称匹配是严格的)
  • 确认已经导出了dashmanserver需要调用的包,比如:
    module tech.flexpoint.dashmancommon {
        exports tech.flexpoint.dashmancommon核心包名;
        // 如果该模块还有其他依赖,也要正确声明requires
    }
    
  • 执行mvn clean installdashmancommon模块安装到本地Maven仓库,确保dashmanserver能拉到这个已模块化的JAR。

2. 检查ModiTect插件的配置

ModiTect默认处理无module-info的依赖,但对于自有模块化JAR,要确保它被加入到模块路径中:
dashmanserver的pom.xml里,修改ModiTect的配置,让它能识别到你的自有模块:

<plugin>
    <groupId>org.moditect</groupId>
    <artifactId>moditect-maven-plugin</artifactId>
    <version>你的ModiTect版本</version>
    <executions>
        <!-- 处理第三方依赖的add-module-info目标可以保留 -->
        <execution>
            <id>create-runtime</id>
            <phase>package</phase>
            <goals>
                <goal>create-runtime</goal>
            </goals>
            <configuration>
                <modulePath>
                    <!-- 确保包含本地Maven仓库里的自有模块,或者构建生成的JAR路径 -->
                    <path>${maven.dependency.classpath}</path>
                    <path>${project.build.directory}/modules</path>
                </modulePath>
                <modules>
                    <module>tech.flexpoint.dashmanserver</module>
                </modules>
                <!-- 其他jlink相关配置 -->
            </configuration>
        </execution>
    </executions>
</plugin>

3. 验证jlink命令的模块路径

从报错信息看,jlink的--module-path参数大概率遗漏了tech.flexpoint.dashmancommon的JAR。你可以在执行mvn package时加上-X参数(Maven debug模式),查看完整的jlink命令,确认你的自有模块JAR是否被包含在--module-path里。如果没有,就需要调整ModiTect的create-runtime配置,把该JAR的路径明确加入。

4. 额外调试步骤

  • 解压dashmancommon模块的JAR包,确认根目录下存在module-info.class文件,且编译后的内容和你写的一致;
  • 单独构建dashmancommon模块,确保没有编译错误,再构建dashmanserver模块。

内容的提问来源于stack exchange,提问作者Pablo Fernandez

火山引擎 最新活动