1

私は約2年間mavenを使用していますが、特に次の問題に遭遇した場合、mavenのプロファイルを正確に理解していないと思います。

私は、secweb-parent、secweb-service、secweb-web の 3 つのモジュールを含む Maven プロジェクトを持っています。secweb-sevice は spring-webmvc に依存し、secweb-web は secweb-service に依存しています。

問題は :

1) 'mvn clean install -Dinclude'を使用すると、うまく動作し、spring-mvc.jar が secweb-web.war に見つかります。

2) 'mvn clean install -Pinclude-jar'を使用すると機能せず、spring-mvc.jar が secweb-web.war に見つからない

理由を知っている人はいますか?また、プロファイルを使用する際に注意すべきことはありますか?

(私は、依存関係の範囲を定義できることを知っています。このプロジェクトは、異なるプロファイルのアクティブ化メソッドの異なる結果をデモするためだけにここにあります)


secweb-parent の 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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <properties>
        <project.version>1.0.0</project.version>
    </properties>

    <groupId>com.mediatek.dt</groupId>
    <artifactId>secweb-parent</artifactId>
    <version>${project.version}</version>
    <packaging>pom</packaging>

    <modules>
        <module>../secweb-web</module>
        <module>../secweb-service</module>
    </modules>
</project>

secweb-service の 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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.mediatek.dt</groupId>
        <artifactId>secweb-parent</artifactId>
        <version>${project.version}</version>
        <relativePath>../secweb-parent</relativePath>
    </parent>

    <artifactId>secweb-service</artifactId>

    <profiles>
        <profile>
            <id>include-jar</id>
            <activation>
                <property>
                    <name>include</name>
                </property>
            </activation>
            <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-webmvc</artifactId>
                    <version>2.5</version>
                </dependency>
            </dependencies>
        </profile>
    </profiles>
</project>

secweb-web の 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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.mediatek.dt</groupId>
        <artifactId>secweb-parent</artifactId>
        <version>${project.version}</version>
        <relativePath>../secweb-parent</relativePath>
    </parent>

    <artifactId>secweb-web</artifactId>
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>com.mediatek.dt</groupId>
            <artifactId>secweb-service</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
</project>
4

1 に答える 1

-1

次の例のようにMaven ヘルプ プラグインを使用して、アクティブなプロファイルを確認する必要があります。

change directory to the parent
e.g. cd /my/project/secweb-parent
Then execute the following command twice for comparing

mvn help:help:active-profiles

mvn help:help:active-profiles -Pinclude-jar

とにかく重要な点はバージョンです。あなたは1.0.0と定義しています。代わりに1.0.0-SNAPSHOTを使用したいと思います。

SNAPSHOT の詳細については、こちらを参照してください。

なぜこれを使うのですか?SNAPSHOT バージョンは、現在開発中のプロジェクトに使用されます。プロジェクトがアクティブな開発中のソフトウェア コンポーネントに依存している場合は、SNAPSHOT リリースに依存することができます。 ビルドを実行すると、Maven は定期的にリポジトリから最新のスナップショットをダウンロードしようとします。同様に、システムの次のリリースのバージョンが「1.4」である場合、正式にリリースされるまで、プロジェクトのバージョンは「1.4-SNAPSHOT」になります。

デフォルト設定では、Maven はリモート リポジトリの SNAPSHOT リリースをチェックしません。SNAPSHOT リリースに依存するには、ユーザーは、POM のリポジトリまたは pluginRepository 要素を使用して、スナップショットをダウンロードする機能を明示的に有効にする必要があります。

こちらのスタックオーバーフローにも、スナップショットに関する有用な質問と回答があります。

これが役立つことを願っています。

于 2013-03-05T08:00:48.663 に答える