質問

以前の Maven の質問について、SO でいくつかの役立つ投稿を読みました。現在、Maven を学ぶことに非常に興味があります (理由は、Maven が好きで、上司が私にそうするように要求しているためです)。私は現在[この][1]本を読んでいて、例を参考にして取り組んでいます。簡単な本ですが、中にはいくつかの間違い(些細な間違い)がありますが、私のような初心者にとっては見つけるのが難しいかもしれませんが、一度見つけられれば簡単に修正できます。Maven を上から下まで理解するのに適した本は他にありますか?

質問の 2 番目の部分は、この本の例に関連するものですが、おそらく簡単な説明が私の疑問を解決するでしょう。

これが問題です、私が作りました simple-weather 特定の郵便番号を指定すると、Yahoo Weather サーバーから気象条件を取得し、気象情報を返す Java のプロジェクトです。

次に、「simple-webapp」を作成しました(上記のものと同様にmavenを使用して、言及するのを忘れていました)。これは基本的に、mavenにデフォルトのサーブレットがすでに存在するWebプロジェクトですが、何も行いません。

そして、私はいくつか持っています parent-project これら 2 つのプロジェクトを 1 つにマージしたいので、2 つのモジュールを持つ pom.xml を作成しました。1 つは情報を取得するモジュール (Java プロジェクト)、もう 1 つは Web 上に表示するモジュール (Web アプリ) です。

最後にはすべてうまくいきましたが、ここで奇妙なことが起こります。Webアプリに文字列「名前」を表示させてから、それを独立して構築すると、その文字列が正確に表示されます。しかし、Webアプリケーションを「親プロジェクト」に配置し、この文字列を「name1」に変更して、それをSAパートプロジェクトのサブモジュールとしてビルドすると、..何も変わりません..

それで、要点に戻ります。simple-webapp は simple-weather に依存しているため、これを単独で構築することはもうできません。そのため、Webapp に変更を加えたい場合は、ここで行います。「親プロジェクト」の外で Web アプリを変更し、そこでビルドして親プロジェクトに貼り付けると、変更が適用されます。なぜですか。サーブレットのコンテンツを直接変更したり、サーブレットのコンテンツに別のコンテンツを追加したりできないのはなぜですか。 「親プロジェクト」の一部としての webapp?

ありがとう..長くて退屈な質問なのはわかっていますが、私はただ物事を学ぼうとしているだけなので、ここより質問するのに適した場所はありません :D

編集 - 各プロジェクトの POM ファイルは次のとおりです。

1.単純な親の 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>org.sonatype.mavenbook.multi</groupId>
    <artifactId>simple-parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0</version>
    <name>Multi Chapter Simple Parent Project</name>
<modules>
<module>simple-weather</module>
<module>simple-webapp</module>
</modules>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

2.単純な天気 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>
<parent>
<groupId>org.sonatype.mavenbook.multi</groupId>
<artifactId>simple-parent</artifactId>
<version>1.0</version>
</parent>
<artifactId>simple-weather</artifactId>
<packaging>jar</packaging>
<name>Multi Chapter Simple Weather API</name>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.5</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

3.シンプルウェブアプリ 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>
<parent>
<groupId>org.sonatype.mavenbook.multi</groupId>
<artifactId>simple-parent</artifactId>
<version>1.0</version>
</parent>
<artifactId>simple-webapp</artifactId>
<packaging>war</packaging>
<name>simple-webapp Maven Webapp</name>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.sonatype.mavenbook.multi</groupId>
<artifactId>simple-weather</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<build>
<finalName>simple-webapp</finalName>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
役に立ちましたか?

解決

あなたの質問を完全に理解できるかどうかわかりません。ただし、Maven のいくつかの原則を説明しましょう。

したがって、次のような構造になります。

parent
  + simple-weather
  + simple-webapp

Maven の観点から見ると、ここには 3 つのプロジェクトがあります。

  • , 、 これは pom プロジェクト(すなわち、その packaging 属性はに設定されています pom)
  • 単純な天気, 、 これは jar プロジェクトと持っています 親として。
  • シンプルなウェブアプリ, 、 これは war プロジェクトは、 親として、そして 単純な天気 依存関係として。

親プロジェクトは、Maven の 2 つの概念を使用します。

  • その遺産は、彼の子供たち全員が(単純な天気 そして シンプルなウェブアプリ) は彼のプロパティをすべて継承します (この概念は、 extends Javaでは)。
  • 集計。次の定義によって定義されます。 <modules>. 。集約とは、プロジェクトで実行されるすべてのコマンドがそれぞれのプロジェクトでも実行されることを意味します。 module.

(を使用して) ビルドするとどうなるでしょうか mvn clean install) で ディレクトリ?

  1. Maven が「コンパイル」します。 プロジェクト、そしてその後 インストール ローカル リポジトリの pom.xml。
  2. Maven がコンパイルします 単純な天気 プロジェクトですが、親があるため、Maven は親の pom.xml ファイルをローカル リポジトリ内で検索します。JAR が作成されると、ローカル リポジトリにインストールされます。
  3. Maven は最終的に シンプルなウェブアプリ プロジェクト。Maven は親 pom.xml に対しても同じことを行いますが、 単純な天気 プロジェクト。

3 番目のポイントで説明した状況は重要です。を構築したい場合は、 シンプルなウェブアプリ プロジェクト、Maven は いつも 彼のすべての依存関係を見つけてみてください。 単純な天気 - ローカル (または遠隔) リポジトリから。

そのため、 シンプルなウェブアプリ 構築やインストールを行わずに 単純な天気, Maven は後者のプロジェクトを見つけられないか、古いバージョンを見つけます。

要約すると、Maven を使用してマルチモジュール プロジェクトに取り組むときは、常にルート (または親) ディレクトリからビルドおよびインストール コマンドを実行するようにしてください。

この説明が十分に明確であり、あなたの場合に何が起こるかを理解するのに役立つことを願っています。詳細については、お気軽にお問い合わせください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top