2017-02-08 40 views
2

我将一些现有的项目从ant更改为maven项目。 目前为止这么好。Maven:类型无法解析。它是从所需的.class文件间接引用的。

所有项目都具有相同的groupId。 Theres是一个名为“ServerBase”和artifactId“server-base”的项目。 在这个项目那里有一个抽象类“BaseService”,它通过定义了一个记录:

import org.jboss.logging.Logger; 
[...] 
protected Logger log = Logger.getLogger(this.getClass()); 

那里有另一个项目名称为“服务器”和artifactId的“服务器”。 在这个项目中,有一个类ConfigurationDAOImpl扩展了上面的BaseService-Class。 在ConfigurationDAOImpl中,记录器日志用于创建一些输出。

在“服务器”的我已经声明POM文件:

<dependency> 
     <groupId>com.tcom.amadeus</groupId> 
     <artifactId>server-base</artifactId> 
     <version>${project.version}</version> 
    </dependency> 

在构建路径依赖性显示下MavenDependencies很不错。我之前从构建路径中删除了旧版本/自然版/蚂蚁依赖版。 如果我删除它,我获得关于旷课等 很多错误,但尽管我确实有这种依赖我正在Eclipse中的跟随着错误(标签下的标记):

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 

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

任何进一步的帮助将不胜感激。 在此先感谢。

+0

争取在命令行:MVN清洁套装...... – khmarbaise

+0

没有帮助,但是当我明确地添加服务器的pom文件内这种相关性: org.jboss.logging 的jboss-记录 错误消失。但我并不真的想这样做,因为这种依赖性仍然在基于服务器的'pom文件中定义,并且我添加了从服务器到服务器的依赖关系,因此我希望以传递方式从服务器基础获取所有依赖关系。我错了吗? – Kaspatoo

+0

好吧我想我得到它 我在服务器基地pom文件内说的依赖性已得到范围:提供,当它擦除(这将导致使用默认值)或将其更改为'编译'(我认为是默认),错误也消失。 我现在要研究范围编译是否可以查看部署(我可能不希望部署jar也是因为目标应用程序服务器仍然有自己的jar包)。 感谢所有。 – Kaspatoo

回答

1

有两种方式来 '解决' 这个:

1) 明确添加所需的相关服务器项目中POM-文件:

<dependency> 
    <groupId>org.jboss.logging</groupId> 
    <artifactId>jboss-logging</artifactId> 
</dependency> 

2) 改变的的SCOP所需的从属服务器基础项目pom文件从现在'提供'到'编译'或删除范围标签的所有默认范围被maven使用(我猜是'编译')

旧:

<dependency> 
    <groupId>org.jboss.logging</groupId> 
    <artifactId>jboss-logging</artifactId> 
    <scope>provided</scope> 
</dependency> 

新:

<dependency> 
    <groupId>org.jboss.logging</groupId> 
    <artifactId>jboss-logging</artifactId> 
    <scope></scope> 
</dependency> 

或:

<dependency> 
    <groupId>org.jboss.logging</groupId> 
    <artifactId>jboss-logging</artifactId> 
</dependency> 

一些背景来此从文档:

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

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

谢谢大家。

0

它看起来像apache日志记录库不是从你的server-base项目传递带来的。检查在项目server下MavenDependencies你看到commons-logging(Apache日志记录)jar。如果没有,那么在server-base项目中添加这个作为你的maven依赖项。

server-base依赖的所有罐子重复上述操作。

+0

我可以在服务器行家依赖看到: 的jboss-测井3.3.0.Final-红帽-1.jar 共享记录-1.2.jar 如上此Logger - 对象表示为具有问题的唯一一个。 如果它不在那里,我认为服务器项目也应该在类“BaseService”中显示一个错误。 – Kaspatoo

+0

我以为你的服务器基地是一个基于蚂蚁的项目将在maven依赖中使用范围系统。 – GauravJ

+0

所有项目都是用maven构建的 – Kaspatoo

相关问题