我一直在使用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>
答案 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。
我希望这可能有所帮助。