java - Maven 站点 :deploy Compile Error : "cannot find symbol" - how can a specific dependency be excluded?

标签 java maven jms

我正在开发一个基于 Java 8 构建的 Web 服务。我试图确定如何克服常见的 Maven 错误,但有一点小小的改动。运行 mvn install 目标完美运行,没有任何错误。我的 Web 服务已成功构建并运行。仅当尝试执行 site:deploy 目标时,我才会遇到问题。

我已将问题范围缩小到 JMS 2.0 简化 API。或者更准确地说,存在一个问题,即我使用的 Streams-aq 依赖项不知道 2013 年随 JMS 2.0 一起发布的较新的简化 API。至少看起来是这样。使用的 Spring 版本也存在潜在问题。无论如何,导入的 Spring/JMS 依赖项不知道 JMS Context 对象。

当我尝试在代码中创建 Context 对象时,运行它没有问题。然而,当 Maven 的 site-deploy 尝试编译底层依赖项(以构建站点文档中使用的所有 JavaDoc)时,我收到以下错误消息:

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /C:/{path}/src/main/java/org/name/config/JmsConfigurationComp.java:[75,46] cannot find symbol
  symbol:   method createContext()
  location: interface javax.jms.ConnectionFactory
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 40.037 s
[INFO] Finished at: 2019-09-16T19:31:17-06:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-site-plugin:3.7.1:site (default-site) on project testProject: failed to get report for org.apache.maven.plugins:maven-javadoc-plugin: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project testProject: Compilation failure
[ERROR] /C:/{path}/src/main/java/org/name/config/JmsConfigurationComp.java:[75,46] cannot find symbol
[ERROR]   symbol:   method createContext()
[ERROR]   location: interface javax.jms.ConnectionFactory
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

问题:应该有一种方法可以只排除 javax.jms.ConnectionFactory 类,这样 Maven 就不会尝试编译它。我的 JavaDocs 中不需要 ConnectionFactory。我确实不需要文档中的任何 JMS API 文档。

由于代码运行完美无缺,仅仅因为 Maven 无法为它无法解析的外部类构建 JavaDocs 而被阻止,这似乎很荒谬!特别是当它是 Java 编译器可以轻松找到的有效方法时! ;-)

我在 POM 文件中尝试了许多排除命令,但似乎都不起作用。我不想冒影响你们任何优秀工程师提供你们认为我已经尝试过的解决方案的风险,所以我不会在这里浪费空间列出 POM 代码块。如果您遇到类似的问题,请花一点时间提供对您有用的建议或示例。

最佳答案

我解决了这个问题。在读完这篇优秀的文章后,我发现了导致 Maven 抛出 ( "Cannot find symbol" compilation error ) 的原因的广泛列表,我意识到我尝试排除无法定位的类并不是解决方案。 @khmarbaise 表达了类似的观点。

我通过在项目 POM 文件中将 JMS API 2.0 版显式定义为 Maven 依赖项解决了编译问题。以前只有 JMS 1.1 得到了解决。

我错误地指出它已经存在,但由于版本 1.1 是从包含streams-aq(以及随后的 JMS)的内部项目继承的,因此只有版本 1.1 的 JMS API 可用。

一旦正确定义了 JMS 2.0 版,Maven 就能够找到缺失的 JMS 2.0 方法,并成功地将源代码编译到服务的 JavaDocs 中。它还具有误导性,因为 Java 代码可以毫无问题地定位有问题的方法。

关于java - Maven 站点 :deploy Compile Error : "cannot find symbol" - how can a specific dependency be excluded?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57966431/

相关文章:

java - 如何获取我的 war 文件的某个文件夹中的文件列表?

java - netbeans 数据库检索数据并将其显示在另一个 jframe 文本字段中

java - 从 Eclipse 运行 Jboss EAP 6.3 时出错?

java - JUnit 测试在不应该执行的时候执行

java - 配置 Maven Shade minimizeJar 以包含类文件

java - 有没有办法将 MDB javadoc 作为其描述注入(inject)?

java - 运行 gwt 开发模式时的服务器端测试用例

java - 无法使用 Oracle 数据库连接在 Spring 中加载配置类

java - 使用 JMS 临时队列进行同步使用是一种好习惯吗?

glassfish - 使用故障转移协议(protocol)时使用 genericra 集成 activemq 和 glassfish 时出现问题