Maven:类型无法解决.它是从所需的.class文件间接引用的

Kas*_*too 7 maven-3 maven

我将一些现有项目从蚂蚁改为了maven项目.到现在为止还挺好.

所有项目都有相同的groupId.这是一个名为"ServerBase"和artifactId"server-base"的项目.在这个项目中有一个抽象类"BaseService",它通过以下方式定义记录器:

import org.jboss.logging.Logger;
[...]
protected Logger log = Logger.getLogger(this.getClass());
Run Code Online (Sandbox Code Playgroud)

另一个名为"Server"和artifactId"server"的项目.在这个项目中,有一个类ConfigurationDAOImpl扩展了上面的BaseService-Class.在ConfigurationDAOImpl中,记录器日志用于创建一些输出.

在"服务器"的POM文件中,我声明了:

    <dependency>
        <groupId>com.tcom.amadeus</groupId>
        <artifactId>server-base</artifactId>
        <version>${project.version}</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

在BuildPath下,依赖关系在MavenDependencies下显示得非常好.我之前从构建路径中删除了旧的dirct/natural/ant-dependency.如果我删除它我会得到很多关于缺少类等的错误.但是虽然我确实有这种依赖,但我在eclipse中得到了followin错误(在制表符标记下):

The type org.apache.commons.logging.Log cannot be resolved. It is indirectly referenced from required .class files

Resource: ConfigurationDAPImpl.java

Path: /Server/src/main/...

Location: Line 24

Type: Java Problem
Run Code Online (Sandbox Code Playgroud)

我尝试删除依赖项并再次添加它,但没有任何运气.这两个项目都参考了JAVA 1.8.这两个项目都是使用目标清理包多次构建的.这两个项目都由Righclick更新或按F5.我正在使用Eclipse版本:Neon.1a版本(4.6.1)我正在使用apache-maven-3.3.9我正在使用m2e插件.

任何进一步的帮助将不胜感激.提前致谢.

Kas*_*too 4

有两种方法可以“解决”这个问题:

\n\n

1)\n在服务器项目 pom 文件中显式添加所需的依赖项:

\n\n
<dependency>\n  <groupId>org.jboss.logging</groupId>\n  <artifactId>jboss-logging</artifactId>\n</dependency>\n
Run Code Online (Sandbox Code Playgroud)\n\n

2)\n将 server-base-projects pom 文件中所需依赖项的作用域从目前的“provide”更改为“compile”,或者完全删除作用域标记,以便 maven 使用默认作用域(我猜是“编译”)

\n\n

老的:

\n\n
<dependency>\n  <groupId>org.jboss.logging</groupId>\n  <artifactId>jboss-logging</artifactId>\n  <scope>provided</scope>\n</dependency>\n
Run Code Online (Sandbox Code Playgroud)\n\n

新的:

\n\n
<dependency>\n  <groupId>org.jboss.logging</groupId>\n  <artifactId>jboss-logging</artifactId>\n  <scope></scope>\n</dependency>\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者:

\n\n
<dependency>\n  <groupId>org.jboss.logging</groupId>\n  <artifactId>jboss-logging</artifactId>\n</dependency>\n
Run Code Online (Sandbox Code Playgroud)\n\n

文档中的一些背景:

\n\n

http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Transitive_Dependencies

\n\n
\n

假如这很像\xc2\xa0compile,但表示您希望 JDK 或容器在运行时提供依赖项。例如,\n 在为 Java Enterprise Edition 构建 Web 应用程序时,\n 可以将 Servlet API 和相关 Java EE API 的依赖关系设置为范围\xc2\xa0provided\xc2\xa0,因为 Web 容器提供了这些类.\n 此作用域仅在编译和测试类路径上可用,\n 并且不可传递。

\n
\n\n

谢谢大家。

\n