我在这里读了一些有关以前maven问题的有用帖子,我目前对学习maven非常感兴趣(因为我喜欢它,因为我的老板要求我)。我正在阅读[这本] [1]书,我正在以实例的方式工作。它是一本简单的书,但它内部有一些错误(琐碎的),但对于像我这样的新手很难发现,一旦发现它可以轻松修复。还有其他书可以更好地从上到下理解maven吗?
问题的第二部分是关于本书中的一个例子,也许一个简单的解释会解决我的疑虑。
这是事情,我在java中创建了一个simple-weather
项目,它从雅虎天气服务器检索天气状况,给定特定的邮政编码,它返回天气信息。
然后我创建了一个'simple-webapp'(maven以及上面的那个我忘了提到它),这是一个基本上是一个web项目,它有一些默认的servlet已经存在maven并且什么也没做。
我有一些parent-project
我想将这两个项目合并为一个,所以我制作了一个pom.xml,其中有2个模块,1个用于检索信息(java项目),另一个用于在网络上显示(网络应用程序)。
我最后一切都工作了,但这是奇怪的事情..如果我让webapp显示任何字符串“name”让我们说然后独立构建它,它确实打印该字符串。但是,当我将webapp放在“父项目”中并将此字符串更改为“name1”并将其构建为partent-project子模块时......没有任何变化..
所以我回到这一点,因为simple-webapp依赖于简单的天气我不能再自己构建它了所以现在如果我想对webapp进行一些更改..修改webapp以外的“parent-project”在那里构建然后将其粘贴回父项目,然后更改将应用,为什么会这样,为什么我不能直接更改servlet内容/或在webapp中添加另一个作为部分“父项目”?
谢谢..我知道这是一个漫长而无聊的问题,但我只是想学习东西,没有比这里更好的地方了:D
编辑 - 这里是每个项目的POM文件:
1。 simple-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/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。 simple-webapp 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>
答案 0 :(得分:4)
我不确定完全理解你的问题。但是,让我们解释Maven中的一些原则。
所以你有这样的结构:
parent
+ simple-weather
+ simple-webapp
从Maven的角度来看,我们在这里有3个项目:
pom
项目(即其packaging
属性设置为pom
)jar
项目,并且 parent 是父项。war
项目,将 parent 作为父项,将 simple-weather 作为依赖项。< / LI>
父项目在Maven中使用两个概念:
extends
。<modules>
的定义定义。聚合意味着将在每个module
上运行将在项目上运行的每个命令。如果我在父目录上构建(使用mvn clean install
)会发生什么?
第三点解释的情况很重要:如果你想构建 simple-webapp 项目,Maven将总是尝试找到他所有的依赖项 - 包括 simple-weather - 来自本地(或远程)存储库。
这就是为什么如果你只构建 simple-webapp 而不构建和安装 simple-weather ,Maven将找不到后一个项目,或者会找到旧版本。
总而言之,当您使用Maven处理多模块项目时,请尝试始终从根目录(或父目录)运行构建和安装命令。
我希望这个解释足够清楚,并帮助您了解您的情况会发生什么。不要犹豫,询问更多信息......