gradle打包jar包含lib gradle打包 gradle javafx

本文详细讨论了在使用gradle和javafx进行jlink预算时,可能遇到的“模块路径重复”错误。问题通常来自第三方库不当引入重复的javafx模块1。 Gradle JavaFX Jlink中的模块重复问题
在使用Gradle构建JavaFX应用程序并Error:error:duplicate module on application module path。该错误通常在createMergedModule任务执行期间出现,并明确指出javafx.base、j avafx.controls等JavaFX核心模块在应用程序模块路径上存在重复。
错误现象示例:gt; Task:createMergedModuleerror: duplicated module on application module path module in javafx.baseerror:javafx.controls2中应用程序模块路径模块上的重复模块错误gt;任务:createMergedModule失败登录后复制
问题根源分析:
当项目配置了org .openjfx.javafxplugin插件来管理JavaFX依赖时,该会负责将正确的JavaFX模块(例如javafx.controls、javafx.fxml https://www.con.org.con) trolsfx:controlsfx、org.aerofx:aerofx等),并且可能导致Jlink在构建时发现JavaFX模块被重复引入。这种重复不仅可能导致构建失败,还会造成不必要的资源膨胀和潜在的运行时冲突。
立即学习“Java免费学习笔记(深入)”;2. 识别并解决 JavaFX 依赖的冲突
解决“模块路径重复”问题的关系 JavaFX 模块的第三方依赖。在许多 Java FX 项目中,org.controlsfx:controlsfx 是一个常见的冲程下载 JavaFX 构建的 UI 控件库,自然会依赖 JavaFX。
解决方案:排除交付性JavaFX依赖语义排版的Word-As-Image
文字变形艺术字、文字变形象形字62查看详情
Gradle提供了强大的依赖管理功能,允许我们精确控制性交付依赖。通过在特定的依赖声明中使用排除关键字,我们可以阻止某些库引入其自身的org.openjfx组下的JavaFX模块。
以下是修改build.gradle文件以解决此问题的示例:plugins { id 'java' id 'org.openjfx.javafxplugin' version '0.0.13' id 'org.beryx.jlink' version '2.16.2'}repositories { mavenCentral() mavenLocal()}javafx { version = quot;19quot;modules = [ 'javafx.controls', 'javafx.fxml' ]}依赖项 { 实现 quot;org.aerofx:aerofx:0.2quot; 实现 quot;pdfbox:pdfbox:0.7.3quot;实现 quot: org. 'org.openjfx' // 阻止ControlsFX引入其自身的JavaFX依赖 }实现 quot;org.mariadb.jdbc:mariadb-java-client:2.1.2quot;实现 quot;io.gitlab.vincent-lambert:miscellaneousWidgets:1.7quot;实现 quot;org.apache.httpcomponents:httpclient:4.5.13quot;实现quot;org.apache.httpcomponents:httpmime:4.3.1quot;}application { mainModule = 'CharacterCreator' mainClass = 'CharacterCreator.Menu.App'}tasks.withType(JavaCompile) { options. ['-Dlog4j.configurationFile=./log4j2.xml'] }}登录后复制
在上述代码中,我们对org.controlsfx:controlsfx:11.0.3的实现依赖进行了修改。
通过添加 { except group: 'org.openjfx' },我们明确告知 Gradle 在解析 controlsfx 的依赖时,忽略任何来自 org.openjfx 组的交付性依赖。 openjfx.javafxplugin 已经正确地为项目提供了 J avaFX 模块,这个排除操作可以有效地删除模块路径上的重复。 3. 进一步排查与最佳实践
如果排除org.controlsfx后问题仍然存在,或者您怀疑有其他库也导致了类似问题,可以采取以下步骤进行进一步排查和优化:分析依赖树:Gradle依赖关系--configuration实现命令,仔细检查输出,寻找任何可能引用org.open jfx模块的第三方库。一旦发现,就其应用排除组:'org.openjfx'。检查module-info.java: JavaFX.controls;、requires javafx.controls;、requires javafx.controls;、requires javafx.fxml;等),并且没有多余的或重复的requires语句。javafxplugin配置:确认org.openjfx.javafxplugin的版本和javafx中块的版本及模块配置是正确的,并且与您的项目需求和JavaFX版本兼容。模块路径清理: Jlink在构建时会检查所有输入模块的路径。确保build/jlinkbas e/jlinkjars等中间目录不会意外地包含重复的JavaFX模块,尤其是Java aFX模块相互冲突。上述的排除机制是解决此问题的最有效方法。跨平台考量:模块路径重复问题通常是依赖管理层面的逻辑错误,与操作系统平台(如Windows、Linux、WSL)本身不太。通过解决了模块重复关系,Jli nk工具能够为目标平台生成正确的自定义运行时。4. 总结
在高级的JavaFX项目中,尤其是在利用Jlink进行应用程序预留时,精确的依赖管理至关重要。错误:应用程序模块路径上的重复模块:并利用Gradle的排除机制来阻止第三方库导入性地引入重复的org.openjfx模块,可以有效地解决这个问题。这种方法不仅能够保证Jlink构建过程的顺利进行,还能使最终生成利用Gradle提供的工具(如gradle)依赖)来分析和管理依赖,是每个JavaFX开发者都应该掌握的关键技能。
以上就是Gradle JavaFX Jlink资源:解决模块路径重复错误的详细内容,更多请关注乐哥常识网其他相关文章!相关标签: linux java git windows apache 操作系统 app 工具 ai pdf win gitlab Java 错误 windows gradle linux ui 大家都在看: Java中跨平台文件路径解析差异及实践 Java Files.exists(Path)跨平台行为解析与测试环境管理Java中Files.exists()在跨平台环境下的行为差异与相对路径解析Java中跨平台调用默认浏览器打开URL的策略与实践思路的保存按钮在哪?
