Maven覆盖和Eclipse

时间:2011-11-07 16:21:15

标签: java eclipse web-applications maven

我有2个Maven网络项目A和B. B包含一些公共部分,A依赖于B。

在A的pom.xml中我有:

<dependencies>
    <dependency>
        <groupId>com.mygroup</groupId>
        <artifactId>B</artifactId>
        <version>1.0-SNAPSHOT</version>
        <type>war</type>
        <scope>compile</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.0.2</version>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1.1</version>
        </plugin>
    </plugins>
</build>

我有两个问题:

  1. 在B中进行一些更改时,如果我在A上运行maven构建,则不会在生成的分解存档中看到更改。

  2. 尝试从Eclipse部署A不起作用 - B的内容未包含在生成的war / explosion存档中。

  3. 感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

好吧,如果您更改了B中的内容,则必须将其重新安装到本地maven仓库(mvn install)中,以便其他本地项目将其作为依赖项来接收最新修改。

在构建maven项目时,最好使用Maven构建它(比如mvn package之类的命令)而不使用其他构建工具(例如Eclipse)。如果您想构建一个la Maven,但是从Eclipse GUI的舒适度来看,您可以从以下位置获取m2_eclipse插件:

http://m2eclipse.sonatype.org/installing-m2eclipse.html

将Maven与Eclipse集成在一起。然后,当您在Eclipse中单击项目时,在“运行...”选项下,您将拥有允许Maven构建它的那个,将所有控制台输出重定向到Eclipse控制台窗口。

作为最后一点,在诸如一个aboce之类的设置中,理想情况下,您将创建一个父Maven项目(打包为“pom”),该项目具有子项目B和A(按此顺序)。这样一来,如果你修改了两个项目中的东西,并且你希望用最新的modif构建所有东西,你就可以在父pom上进行maven安装,Maven会处理所有事情。

答案 1 :(得分:4)

放大@ AndreiBodnarescu的观点,您可能没有看到在构建项目A时对project-B所做的更改,因为Maven存储库中没有更改。

如果在同一台机器上构建project-B,您是否可以确保使用mvn install安装到本地存储库?如果project-B是从不同计算机上的构建派生的,那么使用mvn deploy 部署项目-B到公共共享存储库。在这种情况下,如果您没有使用SNAPSHOTted版本控制,或者您没有增加项目B的版本号,则仍然不会选择项目-B。

我看到B的类型为war。 A的包装是什么?它是EAR吗?如果是这样的话,使用带有项目A的maven-war-plugin将没有任何帮助。