Maven Eclipse Java错误类型的层次结构。。。不一致
我读过类似的帖子,但我还没有找到任何解决方案 我正在Windows7上用EclipseJuno进行编辑 我从项目目录中包含两个构建错误的命令行运行了Maven Eclipse Java错误类型的层次结构。。。不一致,java,eclipse,maven,Java,Eclipse,Maven,我读过类似的帖子,但我还没有找到任何解决方案 我正在Windows7上用EclipseJuno进行编辑 我从项目目录中包含两个构建错误的命令行运行了maven clean install war:inplace注意:Maven成功构建ProjectB。 我很确定这两条错误消息是直接相关的 错误 类型SomeClassB的层次结构不一致错误在SomeClassB上和 无法解析javax.servlet.servlet类型。它间接引用自SomeClassC 导入后,以下代码中的类声明行中出现两个错误
maven clean install war:inplace
注意:Maven成功构建ProjectB
。
我很确定这两条错误消息是直接相关的
错误
类型SomeClassB的层次结构不一致
错误在SomeClassB上
和SomeClassC
import foo.bar.one.a.base.SomeClassA;
import foo.bar.two.b.property.PropertyX;
public abstract class SomeClassB extends SomeClassC{
public SomeClassB() {
super();
}
@Override
protected PropertyX getPropertyX() {
return SomeClassA.getPropertyX(this.getPropName());
}
@Override
protected String getPropName() {
return SomeClassA.PROPERTY_NAME;
}
}
需要注意的一些事项:
ProjectC
ProjectB
。ProjectB
的pom.xml文件不包含对ProjectC
的引用。见以下代码:<dependencies>
<dependency>
<groupId>com.ibm.ws</groupId>
<artifactId>j2ee</artifactId>
<version>7.0.0.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.ibm.wps</groupId>
<artifactId>com.ibm.ws.portletcontainer</artifactId>
<version>6.1.0.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>com.ibm.jsf</groupId>
<artifactId>jsf</artifactId>
<version>3.0.7</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.ibm.jsf</groupId>
<artifactId>jsf-impl-messages</artifactId>
<version>7.0.0.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.ibm.jsf</groupId>
<artifactId>jsf-portletbridge</artifactId>
<version>3.1.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.ibm.jsf</groupId>
<artifactId>jsf-ibm</artifactId>
<version>3.0.11</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
<dependency>
<groupId>foo.bar.one.c</groupId>
<artifactId>foo1</artifactId>
<version>1.2.3</version>
<scope>provided</scope>
<type>jar</type>
</dependency>
<dependency>
<groupId>foo.bar.one.c</groupId>
<artifactId>foo2</artifactId>
<version>${foovar2.version}</version>
</dependency>
<dependency>
<groupId>foo.bar.one.c</groupId>
<artifactId>PropertyX</artifactId>
<version>${property.version}</version>
</dependency>
<dependency>
<groupId>foo.bar.one.c</groupId>
<artifactId>ProjectC</artifactId>
<version>${varname.version}</version>
</dependency>
<dependency>
<groupId>foo.bar.one.c</groupId>
<artifactId>foo3</artifactId>
<version>${foovar3.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>foo.bar.one.c</groupId>
<artifactId>foo4</artifactId>
<version>${foovar4.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
<properties>
...
<varname.version>5.2.85373</varname.version>
...
</properties>
com.ibm.ws
j2ee
7.0.0.5
假如
com.ibm.wps
com.ibm.ws.portletcontainer
6.1.0.2
假如
com.ibm.icu
icu4j
3.4.1
com.ibm.jsf
jsf
3.0.7
假如
com.ibm.jsf
jsf impl消息
7.0.0.5
假如
com.ibm.jsf
jsf portletbridge
3.1.5
假如
com.ibm.jsf
jsf-ibm
3.0.11
假如
log4j
log4j
1.2.14
foo.bar.one.c
foo1
1.2.3
假如
罐子
foo.bar.one.c
食物2
${foovar2.version}
foo.bar.one.c
财产x
${property.version}
foo.bar.one.c
项目C
${varname.version}
foo.bar.one.c
foo3
${foovar3.version}
假如
foo.bar.one.c
foo4
${foovar4.version}
假如
javax.servlet
servlet api
2.5
假如
...
5.2.85373
...
我已经确保ProjectC
和类确实存在于我的文件系统中,并且它的路径是ProjectB
的.classpath文件中的一个条目
我尝试过的一种解决方法是将ProjectC
导入eclipse,并将其添加到ProjectB
的Java构建路径中。我不想这样做,因为这对我的团队来说是一种令人沮丧的做法
如何解决此问题?提供此依赖关系
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
javax.servlet
servlet api
2.5
假如
从命令行运行Maven时会发生这种情况
简而言之,Eclipse相信只有它自己才能更改target/classes/
下的文件。如果从命令行运行Maven,它将更改相同的文件,Eclipse将非常混乱
您有两个选择:
我包括(我认为是)相关部分。。。您还需要更多吗?您的pom中是否有servlet api依赖项?请先尝试在下面提供您各自版本的依赖项。@Kalher我的pom中没有该依赖项。我不会提供整个pom,因为它非常庞大,我必须清理所有敏感数据。如果这是一个交易破坏者,请让我知道。这是一个问题的答案,这本身就是根据您提供的信息猜测出来的,所以当然问题是其他的。谢谢您的输入。但是:1。我已经打扫了(很多次)2。更改输出文件夹的后果是什么?