不同的配置激活方法有不同的结果?

时间:2013-03-05 06:15:29

标签: maven

我一直在使用maven大约两年,但我认为我并不完全理解maven中的配置文件,特别是当我遇到以下问题时。

我有一个包含三个模块的maven项目,secweb-parent,secweb-service和secweb-web,secweb-sevice依赖于spring-webmvc,而secweb-web依赖于secweb-service。

问题是:

1)当我使用'mvn clean install -Dinclude'时,它运行良好,并且可以在secweb-web.war中找到spring-mvc.jar

2)当我使用'mvn clean install -Pinclude-jar'时,它不起作用,并且在secweb-web.war中找不到spring-mvc.jar

有人知道为什么吗?当我使用个人资料时,我有什么必须注意的吗?

(我知道我可以定义依赖的范围,这个项目只是为了演示不同的profile激活方法的不同结果)


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

1 个答案:

答案 0 :(得分:-1)

您可以使用Maven Help Plugin作为以下示例来检查有效配置文件

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的更多信息,here

  

你为什么要用这个? SNAPSHOT版本用于正在开发的项目。如果您的项目依赖于正在进行开发的软件组件,您可以依赖于SNAPSHOT版本,并且 Maven将在您运行构建时定期尝试从存储库下载最新快照即可。同样,如果您的系统的下一个版本将具有版本“1.4”,则您的项目将具有版本“1.4-SNAPSHOT”,直到它正式发布。

     

作为默认设置,Maven不会检查远程存储库上的SNAPSHOT版本。要依赖SNAPSHOT版本,用户必须明确启用使用POM中的存储库或pluginRepository元素下载快照的功能。

还有一个关于我们的stackoverflow快照的有用问题和答案,here

我希望这可能有所帮助。