gpt4 book ai didi

java - Maven Eclipse Java 错误类型的层次结构...不一致

转载 作者:行者123 更新时间:2023-12-01 04:13:06 24 4
gpt4 key购买 nike

我读过看起来相似的帖子,但我还没有找到任何可以解决问题的帖子。

我正在 Windows 7 上的 Eclipse Juno 中进行编辑。

我已从包含两个构建错误的项目目录中的命令行运行maven clean install war:inplace注意:Maven 成功构建 ProjectB

我很确定这两个错误消息是直接相关的。

错误

  1. SomeClassB 类型的层次结构不一致 SomeClassB 上出现错误,
  2. 无法解析类型 javax.servlet.Servlet。它是从 SomeClassC
  3. 上所需的 .class 文件 间接引用的

导入后类声明行中的以下代码中出现两个错误:

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;
}

}

一些注意事项:

  1. SomeClassC 在另一个项目中定义。我将其命名为 ProjectC
  2. 上面的代码来自ProjectBProjectB 的 pom.xml 文件确实包含对 ProjectC 的引用。参见下面的代码:

pom.xml

编辑:添加所有依赖项

<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>

我已确保 ProjectC 和该类确实存在于我的文件系统上,并且它的路径是 ProjectB 的 .classpath 文件中的条目。

我尝试过的解决方法是将 ProjectC 导入 eclipse 并将其添加到 ProjectB 的 Java 构建路径中。我不想这样做,因为这对我的团队来说是一种不鼓励的做法。

如何解决这个问题?

最佳答案

当您从命令行运行 Maven 时,会发生这种情况。

简而言之,Eclipse认为只有它自己改变了target/classes/下的文件。如果从命令行运行 Maven,它将更改相同的文件,并且 Eclipse 会非常困惑。

您有两个选择:

  1. 使用“项目”->“清理”再次构建所有内容。

  2. Configure Eclipse to use a different output folder用于从命令行构建而不是 Maven。

关于java - Maven Eclipse Java 错误类型的层次结构...不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19709528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com