9

目標を使用してeclipse:eclipse、Eclipseプロジェクト環境を生成します。展開は正常に機能します。目標は、必要なすべての依存関係のvarクラスパスエントリを作成します。

m2eclipse私のためのエクスポートフォルダを定義するMavenコンテナがありましWEB-INF/libた。でも頼りたくないm2eclipseのでもう使いません。

目標によって生成されるクラスパスエントリには、eclipse:eclipseそのようなエクスポートフォルダはありません。

WTPを使用してサーブレットコンテナを起動すると、ライブラリを除くすべてのリソースとクラスがコンテキストに公開されます。

必要なライブラリを公開するために何が欠けていますか、またはm2eclipse統合なしではそれは不可能ですか?

環境

  • Eclipse 3.5JavaEEガリレオ
  • Apache 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目標を実行した後、依存モジュールが生成されたものにリストされていない.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>ear

次の問題は、1つのMavenPomに2つのビルドライフサイクルがある状況を示しています。

4

2 に答える 2

4

必要なライブラリを公開するために何が欠けていますか、またはm2eclipse統合なしではそれは不可能ですか?

問題がよくわかりません。私はmaven-eclipse-plugin長い間、withmavenwebappsを使用して成功を収めてきました。では、サーバーへの展開は機能しますか?アプリケーションは使用可能ですか?明確にできますか?

念のため、プラグイン構成を使用して新しく作成したWebアプリで簡単なテストを行いました。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(pastie.org上)

pom.xml何も変更されていないことに加えて、元の依存関係から最大60の依存関係を削除しました。を作成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フレームワーク)には、実際には2つの混合機能があります。フレームワーク機能を提供するために使用されるものがありますが、jar-packagingそれを実行すると、それ自体がwebapp構造に拡張されます(WEB-INF/...)

ただし、サーブレットコンテナ自体で拡張機能を備えたフレームワークを実行することも可能であるため、jarとしてパッケージ化せずに基本機能を開発し、カスタムプロジェクトで使用できます。したがって、jarここでは正しいです。


アップデート2

ソースコード(EclipseWtpComponentWriter)は、これがハードコーディングされており、に設定するmaven-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 に答える