1 回答
TA贡献1827条经验 获得超7个赞
正如评论中所讨论的那样,这里可能存在一些问题:
模块定义
本地 jar 和依赖项
基于发布的模块化项目,我将创建一个小型演示多模块化项目来解释这两个问题。
Maven 多模块项目
使用您的 IDE,创建一个 Maven 项目,然后添加两个模块,TextInputProgram
例如checker
:
父pom
<groupId>org.openjfx</groupId>
<artifactId>hellofx</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>TextInputProgram</module>
<module>checker</module>
</modules>
<packaging>pom</packaging>
TextInputProgram pom
<parent>
<groupId>org.openjfx</groupId>
<artifactId>hellofx</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>TextInputProgram</artifactId>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
</plugins>
</build>
Module-info.java
module TextInputProgram {
requires selenium.api;
requires selenium.chrome.driver;
exports project to checker;
}
检查 pom
<parent>
<artifactId>testMods</artifactId>
<groupId>org.openjfx</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>checker</artifactId>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>12.0.2</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>12.0.2</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>TextInputProgram</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.3</version>
<configuration>
<mainClass>sample.Main</mainClass>
</configuration>
</plugin>
</plugins>
</build>
Module-info.java
module checker {
requires javafx.fxml;
requires javafx.controls;
requires TextInputProgram;
opens sample to javafx.fxml;
exports sample;
}
(此时两个模块的代码无关紧要)。
包括解决方案
现在请注意,您必须将其添加到TextInputProgram模块描述符中:
exports project to checker;
如果你想让checker模块访问的TextInputProgram包project。
这将解决此错误:
包项目在模块 TextInputProgram 中声明,不导出它
另请注意,我已将此依赖项包含在checker项目中:
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>TextInputProgram</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
即使有两个模块,在同一个父模块下,您也需要包含一个模块到另一个模块的依赖关系。否则这将失败(找不到模块):
requires TextInputProgram;
mvn clean install您可以在模块中运行TextInputProgram,以安装org.openjfx:TextInputProgram:1.0-SNAPSHOT在您的本地存储库中.m2。
然后您可以运行mvn clean javafx:runintchecker module来运行 GUI 项目。
值得一提的是,将两个 maven 依赖项与 jar 文件结合起来并不是一个好主意。如果您最终同时使用两者,您将收到此错误:
模块“检查器”从“TextInputProgram”和“TextInputProgram”中读取“项目”
此消息意味着模块路径中有两个模块具有完全相同的名称,一个是 maven 依赖项,另一个是 jar 工件。
为了分发您的项目和模块,最好使用 maven 方法,并避免在 lib 文件夹中包含 jar 文件。稍后你的模块将作为单独的工件发布,你不需要修改你的 pom 文件(除了更新版本号)。
添加回答
举报