【问题标题】:maven, eclispse and wtp broke for no reason: it stopped putting the mvn depentent jars in the WEB-INF/libmaven、eclipse 和 wtp 无故中断:它停止将 mvnw 依赖 jar 放入 WEB-INF/lib
【发布时间】:2010-10-20 00:08:51
【问题描述】:

我已经运行 eclipse(Helios Build id:20100617-1415),用于 eclipse 版本 2 (0.1.0.20100xxx) 的 sonotype maven 好几个月没有问题了。

我可以在命令行下“mvn install”,完美的战争,我可以在eclipse本地tomcat中运行webapp没问题。

然后今天早上,我在eclipse中启动了tomcat,点击了serlvet,并且找不到很多类。查看 eclipse 将库放在 webapp .metadata.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\ge-api\WEB-INF\lib 中的位置,我看不到任何标准依赖库(例如 log4j)。

我做了我通常的 mvn 口头禅

  1. 关闭椭圆
  2. 转到父项目的根目录
  3. mvn clean
  4. mvn 安装
  5. mvn elcipse:eclipse
  6. 重启eclipse
  7. 刷新所有项目,从父项目开始。

这没有帮助。

我尝试了所有可用的 m2eclipse 选项 - 没有任何帮助。

所以我尝试了 tomcat 口头禅

  1. 打开日食
  2. 转到服务器选项卡
  3. 移除网页应用
  4. 窗口->首选项->服务器->运行时环境
  5. 删除tomcat 6
  6. 重启eclipse
  7. 再次添加 tomcat 6。
  8. 再次将 web 应用添加到其中。
  9. 在eclipse中重启tomcat服务器

这导致了同样的问题,maven 和 elcipse 互相讨厌并且拒绝说话。而且我没有改变任何东西,甚至没有改变一行 cmets,在它工作和它不工作之间。

我检查了每个配置 - 所需的 jar 正确地作为依赖项放置在每个正确的位置。见下文 - 所有 jar 都在类路径中 - 由 maven 正确放置。

还有一个“订单和导出”选项卡,虽然我不知道导出部分是什么意思:

上面的对话框在库旁边有复选框,所以我试着点击它们(嘿——我很绝望)。当我这样做并点击确定时,我总是会收到此错误:

我从我的 PC 中删除了 tomcat,重新添加并得到同样的错误。我可以愉快地运行一个没有库的测试 Webapp 项目,所以看起来没问题。

在 10 个小时的头发撕裂后,我注意到警告中的一些内容:

描述资源路径位置类型 类路径条目 M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar 不会被导出或发布。可能会导致运行时 ClassNotFoundExceptions。 ge-api P/ge-api 类路径依赖验证器消息

到底是什么原因造成的?

有很多关于这个错误的帖子,似乎说你必须

"open the J2EE Module Dependencies" UI 并在潜在条目表中选择类路径条目(解析的 JAR 将被打包在 WEB-INF/lib 或 EAR 的根目录,通过 Manifest 类路径引用,具体取决于依赖项的类型"

但是,我在 eclipse 的任何地方都没有类似“J2EE 模块依赖项”的东西。

这是我的方面/属性:

看,没有 J2EE,也没有配置选项。

无奈之下,我尝试“快速修复”警告。

“将关联的原始类路径条目标记为发布/导出依赖项。”

它以前有效,为什么我现在必须这样做?无论如何,我在 4 个子项目之一的 10 个库之一上尝试了这个,这些子项目到目前为止由父 pom 管理具有相同的依赖项(是的,我必须这样做 hack 40 次),现在我看到 2)事情有发生了:

  1. 它在 Java 构建路径的库选项卡中添加了“发布/导出依赖项:

如果我不使用自动修复系统,我找不到任何手动执行此操作的方法。

  1. 它给了我更多警告:

"描述资源路径位置类型 类路径条目 M2_REPO/log4j/log4j/1.2.15/log4j-1.2.15.jar 标记为发布/导出,但未在项目类路径上导出。 Eclipse 中的类路径可见性和运行时会有所不同。 ge-core P/ge-core Classpath Dependency Validator Message"

使用 maven 管理类路径有什么意义?

所以现在我一直在破解,直到某些东西正常工作,没有希望回到昨天,一切都正常工作:我用 maven 创建了项目,使用 pom 文件来做所有事情,而 eclipse 也随之而来。到现在为止。

这是我的父母 pom:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.skillkash.ge</groupId>
<artifactId>ge-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>ge-parent</name>
<modules>
 <module>ge-api</module>
 <module>ge-core</module>
 <module>ibo-core</module>
</modules>
<build>
<plugins>
  <plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-compiler-plugin</artifactId>
   <configuration>
    <source>1.6</source>
    <target>1.6</target>
   </configuration>
  </plugin>
 </plugins>
</build>
<dependencies>
<dependency>
 <groupId>log4j</groupId>
 <artifactId>log4j</artifactId>
 <version>1.2.15</version>
 <exclusions>
  <exclusion>
   <groupId>javax.jms</groupId>
   <artifactId>jms</artifactId>
  </exclusion>
  <exclusion>
   <groupId>com.sun.jdmk</groupId>
   <artifactId>jmxtools</artifactId>
  </exclusion>
  <exclusion>
   <groupId>com.sun.jmx</groupId>
   <artifactId>jmxri</artifactId>
   </exclusion>
  </exclusions>
 </dependency>
 <dependency>
  <groupId>org.testng</groupId>
  <artifactId>testng</artifactId>
  <version>5.12.1</version>
 </dependency>
</dependencies>
</project>

这是我的本地 webapp pom:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
    <artifactId>ge-parent</artifactId>
    <groupId>com.skillkash.ge</groupId>
    <version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.skillkash.ge</groupId>
<artifactId>ge-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>ge-api Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.4</version>
    <scope>provided</scope>
  </dependency>    
  <dependency>
   <groupId>com.skillkash.ge</groupId>
   <artifactId>ibo-core</artifactId>
    <version>0.0.1-SNAPSHOT</version>
   <scope>compile</scope>
  </dependency>
  <dependency>
   <groupId>com.skillkash.ge</groupId>
   <artifactId>ge-core</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   </dependency>
   </dependencies>
 <build>
    <finalName>ge-api</finalName>
</build>
</project>

这是我在 Eclipse 中的项目布局:

有谁知道出了什么问题,以及解决问题的正确方法是什么?

【问题讨论】:

  • 只是关于您的 pom 的建议。定义您在 pom 中使用的所有依赖项和插件的版本。换句话说,意味着为每个依赖项或插件定义具有适当版本号的 标记。否则你会遇到不可预知的结果。
  • 这是一个有趣的评论 - 也许 maven-compiler-plugin 更新了自己?
  • 锁定插件版本以实现构建可重复性确实是最佳实践。但是在 maven 编译器插件的特殊情况下,它无论如何都被锁定在 Super POM 中(这并不意味着您不应该遵循最佳实践)。所以不,插件没有自行更新。

标签: java eclipse classpath maven m2eclipse


【解决方案1】:

我的建议:

  • 在使用 m2eclipse 时不要使用eclipse:eclipse (this is not supported)
  • 从工作区中删除项目并从文件系统中删除.eclipse.classpath.settings
  • 通过 Import... > Existing Maven Projects 将项目重新导入您的工作区
  • 不要手动弄乱任何东西

哦,顺便说一句,我会亲自将 WTP 配置为 take full control of Tomcat,而不是使用工作区元数据(但这不应该是问题的根本原因)。

【讨论】:

  • 很好的答案 - 谢谢!我使用 m2eclipse 插件 webapp 原型创建了这个项目。但是,这要么是错误的,要么只完成了一半的工作,因为它没有设置任何源路径(例如 src/main/java)。大约每月一次,整个环境无缘无故停止工作,例如突然无法重新喜欢任何兄弟项目参考。通常我会花几个小时试图找出问题所在(因为什么都没有改变),然后求助于 maven 口头禅,到目前为止,这是唯一有效的方法。但是,我会尝试上述方法。
  • @wingnut webapp 原型故意不假设你会将源代码放在 webapp 中,也不会创建像src/main/javasrc/main/resourcessrc/test/java 等目录。这取决于你来创建它们。
【解决方案2】:

两个想法:

1) Eclipse 咒语:启动 Eclipse。选择文件->全部关闭。关闭并重新启动 Eclipse。

2) 假设您使用源版本控制系统:删除 Eclipse。删除 Tomcat。删除工作区。重新安装 Eclipse(如果您一直遇到此类问题(就像我一样),您可能希望保留一个压缩的 Eclipse,其中包含为此目的预先安装的所有软件包)。重新安装 Tomcat:我建议在某个地方解压缩 Tomcat 并从 Eclipse 启动/停止它,而不是安装 Tomcat 系统。从源存储库中签出您的项目;希望最新版本有效,如果不是尝试旧版本。

【讨论】:

  • 感谢您的回答。我应该说,但我多次尝试了建议 1)(重启 eclipse)——当 elcipse 感到困惑时,它偶尔会起作用。
  • 2) 绝对是最后的手段,因为安装所有插件并为所有项目配置所有内容需要几天时间。我确实单独安装了tomcat,并且一直认为它正在使用这个。你是说它使用的是 Eclipse 内部的 tomcat 吗?
  • 关于tomcat:对不起,不是故意的。 Tomcat(适用于 Windows)有 2 种风格:作为 .zip 文件和作为 Windows 服务安装程序。我的评论只是推荐第一个版本而不是第二个版本,因为我发现从 Eclipse 中使用它更容易(并且卸载就像删除解压缩的文件夹一样简单)
【解决方案3】:

每当我发现库的一些问题时,我都会这样做并且它有效: (注意:我没有使用几乎不适合我的 maven eclipse 插件)

  1. mvn 依赖:解决
  2. mvn eclipse:eclipse
  3. 刷新eclipse项目。

    • 问候, 寿比克

【讨论】:

    【解决方案4】:

    对我来说,如果 Maven 项目在 Eclipse 中损坏,这通常是可行的:

    1. 在项目上“右键单击”
    2. ->“Maven”
    3. ->“更新项目...”
    4. ->“好的”

    【讨论】:

      猜你喜欢
      • 2015-02-28
      • 1970-01-01
      • 2012-09-10
      • 1970-01-01
      • 2017-10-19
      • 2022-08-16
      • 2011-05-15
      • 2011-08-30
      • 1970-01-01
      相关资源
      最近更新 更多