9

我使用这个eclipse:eclipse目标来生成一个 Eclipse 项目环境。部署工作正常。目标为所有需要的依赖项创建 var 类路径条目。

有了m2eclipseMaven Container,它定义了一个WEB-INF/lib适合我的导出文件夹。但是我不想依赖m2eclipse所以我不再使用它了。

目标生成的类路径条目eclipse:eclipse没有这样的导出文件夹。

在使用 WTP 启动 servlet 容器时,它会将除库之外的所有资源和类发布到上下文中。

发布所需的库缺少什么,或者如果没有 m2eclipse 集成是不可能的?

环境

  • Eclipse 3.5 Java EE 伽利略
  • 阿帕奇 Maven 2.2.1 (r801777; 2009-08-06 21:16:01+0200)
  • Java版本:1.6.0_14
  • m2eclipse

maven-eclipse-plugin 配置

    <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-eclipse-plugin</artifactId>
     <version>2.8</version>
     <configuration>
      <projectNameTemplate>someproject-[artifactId]</projectNameTemplate>
      <useProjectReferences>false</useProjectReferences>
      <downloadSources>false</downloadSources>
      <downloadJavadocs>false</downloadJavadocs>

      <wtpmanifest>true</wtpmanifest>
      <wtpversion>2.0</wtpversion>
      <wtpapplicationxml>true</wtpapplicationxml>
      <wtpContextName>someproject-[artifactId]</wtpContextName>

      <additionalProjectFacets>
        <jst.web>2.3</jst.web>
      </additionalProjectFacets>
     </configuration>
    </plugin>

生成的文件

执行eclipse:eclipse目标后,依赖模块未在我的 generated 中列出.settings/org.eclipse.wst.common.component,因此在服务器启动时我错过了依赖项。

这就是我得到的:

<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
  <wb-module deploy-name="someproject-core">
    <wb-resource deploy-path="/" source-path="src/main/java"/>
    <wb-resource deploy-path="/" source-path="src/main/webapp"/>
    <wb-resource deploy-path="/" source-path="src/main/resources"/>
  </wb-module>
</project-modules>

为即将到来的读者更新

这里的问题是异常packaging类型,如果你使用maven-eclipse-plugin请验证<packaging>war</packaging>or的使用ear

以下问题标志着我在一个 maven pom 中有两个构建生命周期的情况。

4

2 回答 2

4

发布所需的库缺少什么,或者如果没有 m2eclipse 集成是不可能的?

我不确定是否理解这个问题。很长一段时间以来,我都maven-eclipse-plugin成功地使用了 with maven webapps。那么,服务器上的部署是否有效?应用程序是否可用?你能澄清一下吗?

以防万一,我用你的插件配置对一个新创建的 webapp 进行了快速测试,看起来不错。我刚刚删除了jst.java构面并配置了maven-compiler-plugin

<plugin>
  <artifactId>maven-compiler-plugin</artifactId>
  <configuration>
    <target>1.5</target>
    <source>1.5</source>
  </configuration>
</plugin>

我添加了对log4j. 然后,当我运行时mvn eclipse:eclipse,这就是我在生成的.settings/org.eclipse.wst.common.component

<project-modules id="moduleCoreId" project-version="2.0">
  <wb-module deploy-name="example-mvn-Q2713648">
    <property name="context-root" value="example-mvn-[artifactId]"/>
    <wb-resource deploy-path="/" source-path="src/main/webapp"/>
    <property name="java-output-path" value="/target/classes"/>
    <dependent-module archiveName="log4j-1.2.14.jar" deploy-path="/WEB-INF/lib" handle="module:/classpath/var/M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar">
      <dependency-type>uses</dependency-type>
    </dependent-module>
    <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/>
  </wb-module>
</project-modules>

依赖项在log4j那里并被发布。我错过了什么?


更新:我将提供的 pom 粘贴到我的war项目中,将其更改为使用 eclipse 插件的 2.8 版并src/main/webappresources元素中删除(它不是资源),这就是我在运行时得到的mvn eclipse:eclipse

<project-modules id="moduleCoreId" project-version="2.0">
  <wb-module deploy-name="example-mvn-Q2713648">
    <property name="context-root" value="example-mvn-[artifactId]"/>
    <wb-resource deploy-path="/" source-path="src/main/webapp"/>
    <property name="java-output-path" value="/target/classes"/>
    <dependent-module archiveName="hsqldb-1.8.0.10.jar" deploy-path="/WEB-INF/lib" handle="module:/classpath/var/M2_REPO/hsqldb/hsqldb/1.8.0.10/hsqldb-1.8.0.10.jar">
      <dependency-type>uses</dependency-type>
    </dependent-module>
    <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/java"/>
    <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/>
  </wb-module>
</project-modules>

在我看来很好。

更新 2:正如我在对您自己的答案的评论中所写,我认为 eclipse 插件不会为包装类型为 的项目生成动态 Web 模块jar。如果您更改包装war,它应该按预期运行。我很确定这是造成你麻烦的原因。

于 2010-04-26T16:30:46.163 回答
0

示例 pom (在paste.org 上)

我已经从原始版本中删除了大约 60 个依赖项,pom.xml除此之外没有任何改变。您只需创建webapp-archetype并将 pom 粘贴到生成的文件中(通过 archetype 命令)

mvn archetype:create 
     -DgroupId=example 
     -DartifactId=mvn 
     -DarchetypeArtifactId=maven-archetype-webapp

在这eclipse:eclipse导致.settings/org.eclipse.wst.common.component现在显示的生成project-version="2.0"之后(在我做了从 1.0 到 1.5 和 2.0 的各种更改之后),但仍然<dependent-module>缺少。

<project-modules id="moduleCoreId" project-version="2.0">
  <wb-module deploy-name="example-mvn-mvn">
    <wb-resource deploy-path="/" source-path="src/main/webapp"/>
    <wb-resource deploy-path="/" source-path="src/main/resources"/>
  </wb-module>
</project-modules>

更新(@Pascal Thivent):这是一个很好的观点。我们的项目(一个网络框架)实际上有两个混合特征。有jar-packaging用于提供框架功能的其中,在运行时将其自身扩展为 webapp 结构(WEB-INF/...)

但也应该可以在 servlet 容器本身上运行带有扩展的框架,因此我们可以开发基本功能而不将其打包为 jar 并将其与自定义项目一起使用。所以jar这里是正确的。


更新 2

源代码(EclipseWtpComponentWriter)表明这是硬编码的,除了设置tomaven-eclipse-plugin之外没有办法进入 then 子句,或者我错过了什么?:(packagingwar

private void writeModuleTypeComponent( XMLWriter writer, String packaging,
                 File buildOutputDirectory, EclipseSourceDir[] sourceDirs, 
                 ArtifactRepository localRepository)
{
   if ( Constants.PROJECT_PACKAGING_WAR.equalsIgnoreCase( packaging ))
   { 
       // Adding the <dependent-modules> stuff
   }
}
于 2010-04-27T08:18:21.020 回答