【问题标题】:m2eclipse and/or wtp not packaging a dependency correctly?m2eclipse 和/或 wtp 没有正确打包依赖项?
【发布时间】:2023-03-13 19:43:02
【问题描述】:

Eclipse Indigo SR 1、wtp 3.3.0、m2eclipse 1.0.100。

将项目发布到 WTP 时,我遇到了其中一个依赖项的奇怪行为;它不是将 jar 放在 WEB-INF/lib 文件夹中,而是创建一个以预期 jar 命名的文件夹,然后将该项目的源代码树(显然)放在该文件夹下。我在依赖项的 pom.xml 或此项目的 pom.xml 中看不到任何可能导致此问题的内容。

其他依赖项被很好地作为 jars 引入。

我的测试项目的pom.xml

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>test</groupId>
  <artifactId>dwhwtptest</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>dwhwtptest Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>org.onebusaway</groupId>
      <artifactId>onebusaway-nyc-transit-data</artifactId>
      <version>2.0.3-SNAPSHOT</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>dwhwtptest</finalName>
  </build>
</project>

这是最终在workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps 发布的内容:

$ find  dwhwtptest/
dwhwtptest/
dwhwtptest//index.jsp
dwhwtptest//META-INF
dwhwtptest//META-INF/MANIFEST.MF
dwhwtptest//META-INF/maven
dwhwtptest//META-INF/maven/test
dwhwtptest//META-INF/maven/test/dwhwtptest
dwhwtptest//META-INF/maven/test/dwhwtptest/pom.properties
dwhwtptest//META-INF/maven/test/dwhwtptest/pom.xml
dwhwtptest//WEB-INF
dwhwtptest//WEB-INF/lib
dwhwtptest//WEB-INF/lib/onebusaway-nyc-transit-data-2.0.3-SNAPSHOT.jar
dwhwtptest//WEB-INF/lib/onebusaway-nyc-transit-data-2.0.3-SNAPSHOT.jar/META-INF
dwhwtptest//WEB-INF/lib/onebusaway-nyc-transit-data-2.0.3-SNAPSHOT.jar/META-INF/MANIFEST.MF
dwhwtptest//WEB-INF/lib/onebusaway-nyc-transit-data-2.0.3-SNAPSHOT.jar/org
dwhwtptest//WEB-INF/lib/onebusaway-nyc-transit-data-2.0.3-SNAPSHOT.jar/org/onebusaway
dwhwtptest//WEB-INF/lib/onebusaway-nyc-transit-data-2.0.3-SNAPSHOT.jar/org/onebusaway/nyc
dwhwtptest//WEB-INF/lib/onebusaway-nyc-transit-data-2.0.3-SNAPSHOT.jar/org/onebusaway/nyc/transit_data
dwhwtptest//WEB-INF/lib/onebusaway-nyc-transit-data-2.0.3-SNAPSHOT.jar/org/onebusaway/nyc/transit_data/model
dwhwtptest//WEB-INF/lib/onebusaway-nyc-transit-data-2.0.3-SNAPSHOT.jar/org/onebusaway/nyc/transit_data/model/NycQueuedInferredLocationBean.java
dwhwtptest//WEB-INF/lib/onebusaway-nyc-transit-data-2.0.3-SNAPSHOT.jar/org/onebusaway/nyc/transit_data/model/NycVehicleManagementStatusBean.java
dwhwtptest//WEB-INF/lib/onebusaway-nyc-transit-data-2.0.3-SNAPSHOT.jar/org/onebusaway/nyc/transit_data/services
dwhwtptest//WEB-INF/lib/onebusaway-nyc-transit-data-2.0.3-SNAPSHOT.jar/org/onebusaway/nyc/transit_data/services/ConfigurationService.java
dwhwtptest//WEB-INF/lib/onebusaway-nyc-transit-data-2.0.3-SNAPSHOT.jar/org/onebusaway/nyc/transit_data/services/VehicleTrackingManagementService.java
dwhwtptest//WEB-INF/web.xml

这是依赖项的pom.xmlonebusaway-nyc-transit-data 模块:

<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>
    <parent>
        <artifactId>onebusaway-nyc</artifactId>
        <groupId>org.onebusaway</groupId>
        <version>2.0.3-SNAPSHOT</version>
    </parent>
    <groupId>org.onebusaway</groupId>
    <artifactId>onebusaway-nyc-transit-data</artifactId>
    <packaging>jar</packaging>

    <name>onebusaway-nyc-transit-data</name>
    <description>Common interfaces and classes for exchanging transit data between UI front-end and transit back-end data sources.</description>

    <build>
        <finalName>onebusaway-nyc-transit-data</finalName>
    </build>
</project>

建议?还有什么我可以调查以试图弄清楚这里发生了什么?

【问题讨论】:

  • 好的,我似乎有一个解决方法,但我仍然想知道为什么它不能按预期工作。行为不端的依赖项在测试项目的 Web 部署程序集中列出,但我所做的是通过 Eclipse UI 将其删除并重新添加。这次当我将项目添加到服务器并发布时,jar 就在那里,正确。想法?
  • 我也有同样的问题。据我所见,从 Eclipse 发布的 webapps 文件夹(您通常会在 /.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps 下找到)Eclipse 有时会发布 jar包含源而不是包含类的 jar。这在我的项目中经常发生,我有一个包含多个子项目的大型 Maven 项目。目前解决方法也没有帮助:(我仍在试图弄清楚发生了什么
  • 找到一个始终如一的解决方法,请参阅我的答案。
  • This question 也描述了同样的问题,尽管它在询问为什么会发生这种情况

标签: eclipse maven eclipse-wtp


【解决方案1】:

我的一位同事向我提供了一种解决问题的方法,但它需要很少的手动步骤。

  • 从 Eclipse 中删除项目

  • 使用终端转到您的 maven 根文件夹并使用此命令杀死所有 eclipse 内容(您必须这样做两次):

    $> 找到 . -iname ".settings" -exec rm -rf '{}' \; ;找 。 -iname ".project" -exec rm -rf '{}' \; ;找 。 -iname ".classpath" -exec rm -rf '{}'

  • 在您的 Maven 根目录上,执行以下命令:

    $> mvn -Dwtpversion=2.0 eclipse:eclipse

  • 在 eclipse 中重新导入您的项目:现在一切正常,eclipse 将发布包含代码的 jar :)

HTH,布鲁诺(感谢西奥多!)

【讨论】:

    【解决方案2】:

    除了您当前安装的 m2e 插件(不包含对基于 WTP 的项目的支持)之外,我建议您尝试 m2e-wtp 插件。该插件可通过嵌入式 Marketplace 客户端或在 Eclipse Marketplace 中获得( http://marketplace.eclipse.org/content/maven-integration-eclipse-wtp)。它提供了与 WTP 的更紧密的 Maven 集成,并且应该可以改善整体 Maven 与 WTP 的体验。

    【讨论】:

      【解决方案3】:

      如果仍然无法正常工作,请删除发布文件夹。它看起来像:

      <Path To Your IDE>\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
      

      首先确保从 IDE 中删除 Tomcat 或您正在使用的任何其他服务器下的项目。然后关闭 ID,否则您无法删除该文件夹。

      完成此操作后,您可以运行 maven clean/build/install 命令并部署您的项目。

      如果这不起作用,则此问题与 IDE 或应用程序服务器无关。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-21
        • 2011-03-03
        • 2017-11-03
        • 1970-01-01
        • 2019-08-13
        • 2013-01-02
        • 2012-03-21
        • 1970-01-01
        相关资源
        最近更新 更多