You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 17:25:30