使用ModiTect构建vlcj时遇模块依赖冲突问题求助
使用ModiTect构建vlcj项目时的模块依赖与包导出冲突问题
执行mvn clean install时先触发以下错误:
Module uk.co.caprica.vlcj.osx.stubs not found, required by uk.co.caprica.vlcj
将该模块添加到项目依赖及vlcj模块的additionalDependencies后,又出现新冲突:
Modules vlcj.osx.stubs and uk.co.caprica.vlcj.osx.stubs export package com.apple.eawt to module vlcj.natives
项目相关配置
pom.xml
... <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <junit.version>5.8.2</junit.version> <javafx.version>18.0.1</javafx.version> </properties> <dependencies> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>${javafx.version}</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-web</artifactId> <version>${javafx.version}</version> </dependency> <dependency> <groupId>uk.co.caprica</groupId> <artifactId>vlcj</artifactId> <version>4.7.1</version> </dependency> <dependency> <groupId>uk.co.caprica</groupId> <artifactId>vlcj-javafx</artifactId> <version>1.1.0</version> </dependency> <dependency> <groupId>uk.co.caprica</groupId> <artifactId>vlcj-osx-stubs</artifactId> <version>2.0.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.moditect</groupId> <artifactId>moditect-maven-plugin</artifactId> <version>1.0.0.RC2</version> <executions> <execution> <id>add-module-infos</id> <phase>package</phase> <goals> <goal>add-module-info</goal> </goals> <configuration> <modules> <module> <artifact> <groupId>uk.co.caprica</groupId> <artifactId>vlcj</artifactId> <version>4.7.1</version> </artifact> <additionalDependencies> <dependency> <groupId>uk.co.caprica</groupId> <artifactId>vlcj-osx-stubs</artifactId> <version>2.0.0</version> </dependency> </additionalDependencies> <moduleInfo> <name>uk.co.caprica.vlcj</name> <exports> *; </exports> </moduleInfo> </module> <module> <artifact> <groupId>uk.co.caprica</groupId> <artifactId>vlcj-javafx</artifactId> <version>1.1.0</version> </artifact> <moduleInfo> <name>uk.co.caprica.vlcj.javafx</name> <exports> *; </exports> </moduleInfo> </module> </modules> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.10.1</version> <configuration> <forceJavacCompilerUse>true</forceJavacCompilerUse> <annotationProcessorPaths> <path> <groupId>uk.co.caprica</groupId> <artifactId>vlcj</artifactId> <version>4.7.1</version> </path> <path> <groupId>uk.co.caprica</groupId> <artifactId>vlcj-javafx</artifactId> <version>1.1.0</version> </path> <path> <groupId>uk.co.caprica</groupId> <artifactId>vlcj-osx-stubs</artifactId> <version>2.0.0</version> </path> </annotationProcessorPaths> <source>18</source> <target>18</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.2</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> </manifest> <manifestEntries> <mode>development</mode> <url>${project.url}</url> <key>value</key> </manifestEntries> </archive> </configuration> </plugin> <plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.8</version> <executions> <execution> <id>default-cli</id> <configuration> <mainClass>com.example/Main</mainClass> <launcher>launcher</launcher> <jlinkZipName>jlinkZipName</jlinkZipName> <jlinkImageName>jlinkImageName</jlinkImageName> <noManPages>true</noManPages> <stripDebug>true</stripDebug> <noHeaderFiles>true</noHeaderFiles> <compress>2</compress> </configuration> </execution> </executions> </plugin> </plugins> </build>
module-info.java
module com.example { requires javafx.controls; requires javafx.web; requires jdk.jsobject; requires uk.co.caprica.vlcj; requires uk.co.caprica.vlcj.javafx; exports com.example; }
使用的jdeps命令
jdeps --generate-module-info E:\Programming\IntelliJ\workspace\project\target\moditect --add-modules vlcj.natives,com.sun.jna,com.sun.jna.platform,vlcj.osx.stubs,uk.co.caprica.vlcj.osx.stubs --module-path C:\Users\User\.m2\repository\uk\co\caprica\vlcj-natives\4.1.0\vlcj-natives-4.1.0.jar;C:\Users\User\.m2\repository\net\java\dev\jna\jna\5.2.0\jna-5.2.0.jar;C:\Users\User\.m2\repository\net\java\dev\jna\jna-platform\5.2.0\jna-platform-5.2.0.jar;C:\Users\User\.m2\repository\uk\co\caprica\vlcj-osx-stubs\1.0.0\vlcj-osx-stubs-1.0.0.jar;C:\Users\User\.m2\repository\uk\co\caprica\vlcj-osx-stubs\2.0.0\vlcj-osx-stubs-2.0.0.jar C:\Users\User\.m2\repository\uk\co\caprica\vlcj\4.7.1\vlcj-4.7.1.jar
解决步骤
1. 清理旧版本依赖,避免模块名冲突
vlcj-osx-stubs 2.0.0的模块名已经改为uk.co.caprica.vlcj.osx.stubs,而旧版本(比如1.0.0)的模块名是vlcj.osx.stubs,两者都导出com.apple.eawt包导致冲突。
- 删除本地Maven仓库中1.0.0版本的vlcj-osx-stubs
- 确保项目依赖中只保留2.0.0版本,没有旧版本残留
2. 修改jdeps命令,移除无效模块引用
更新jdeps命令,去掉vlcj.osx.stubs模块,只保留新版本的模块名:
jdeps --generate-module-info E:\Programming\IntelliJ\workspace\project\target\moditect --add-modules vlcj.natives,com.sun.jna,com.sun.jna.platform,uk.co.caprica.vlcj.osx.stubs --module-path C:\Users\User\.m2\repository\uk\co\caprica\vlcj-natives\4.1.0\vlcj-natives-4.1.0.jar;C:\Users\User\.m2\repository\net\java\dev\jna\jna\5.2.0\jna-5.2.0.jar;C:\Users\User\.m2\repository\net\java\dev\jna\jna-platform\5.2.0\jna-platform-5.2.0.jar;C:\Users\User\.m2\repository\uk\co\caprica\vlcj-osx-stubs\2.0.0\vlcj-osx-stubs-2.0.0.jar C:\Users\User\.m2\repository\uk\co\caprica\vlcj\4.7.1\vlcj-4.7.1.jar
3. 为vlcj-osx-stubs添加模块信息
在ModiTect的<modules>节点中新增该模块的配置,确保模块名和导出包正确:
<module> <artifact> <groupId>uk.co.caprica</groupId> <artifactId>vlcj-osx-stubs</artifactId> <version>2.0.0</version> </artifact> <moduleInfo> <name>uk.co.caprica.vlcj.osx.stubs</name> <exports> com.apple.eawt; </exports> </moduleInfo> </module>
4. 优化编译器配置
maven-compiler-plugin的annotationProcessorPaths中不需要添加vlcj相关依赖(除非项目确实用到了它们的注解处理器),可以直接移除这些路径,减少不必要的模块处理。
5. 强制更新依赖并重新构建
执行mvn clean install -U强制刷新依赖,确保所有模块版本一致。
内容的提问来源于stack exchange,提问作者Dmitriy
相关产品推荐
相关产品推荐

