代码之家  ›  专栏  ›  技术社区  ›  Christopher Klewes

带有maven eclipse插件的maven webapp不会生成<dependent module>

  •  9
  • Christopher Klewes  · 技术社区  · 14 年前

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

    m2eclipse maven容器定义了一个导出文件夹 WEB-INF/lib 为了我。但我不想依赖 M2Eclipse 所以我不再用了。

    生成的类路径项 日蚀:日蚀 目标没有这样的导出文件夹。

    在用wtp引导servlet容器时,它将所有资源和类(库除外)发布到上下文。

    发布所需的libs缺少什么,或者没有m2eclipse集成就不可能做到这一点吗?

    环境

    • Eclipse 3.5 Java EE伽利略
    • 阿帕奇马文2.2.1(R801777;2009-08-06 21:16:01+0200)
    • Java版本:1.60y14
    • M2Eclipse

    maven eclipse插件配置

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

    生成的文件

    在执行 日蚀:日蚀 目标,依赖模块未在我生成的 .settings/org.eclipse.wst.common.component ,所以在服务器启动时,我会想念depdenes。

    这就是我得到的:

    <?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> ear .

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

    2 回复  |  直到 11 年前
        1
  •  4
  •   Pascal Thivent    14 年前

    发布所需的libs缺少什么,或者没有m2eclipse集成就不可能做到这一点吗?

    我不一定能理解这个问题。我用过 maven-eclipse-plugin 在很长一段时间内与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 project,将其更改为使用eclipse插件的版本2.8,并删除 src/main/webapp resources 元素(它不是资源),这是我在运行时得到的 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插件不会为一个打包类型为 jar . 如果你换了包装 战争 ,它应该按预期运行。我敢肯定这是你麻烦的原因。

        2
  •  0
  •   Christopher Klewes    14 年前

    这个 example pom (on pastie.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):这是一个很好的观点。我们的项目(一个web框架)实际上有两个混合的特性。有 jar-packaging 它用于提供框架功能,同时运行它将自身扩展到webapp结构中。 (WEB-INF/...)

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


    更新2

    这个 source code (EclipseWtpComponentWriter) maven-eclipse-plugin 显示这是硬编码的,除了设置 packaging war ,还是我错过了什么?:(

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