【问题标题】:Maven overlays and EclipseMaven 覆盖层和 Eclipse
【发布时间】:2011-12-23 18:29:05
【问题描述】:

我有 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 的内容不包含在生成的战争/爆炸档案中。

感谢您的帮助。

【问题讨论】:

    标签: java eclipse web-applications maven


    【解决方案1】:

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

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

    我看到 B 的类型是 war。 A的包装是什么?是耳朵吗?如果是这样,将 maven-war-plugin 与 project-A 一起使用将无济于事。

    【讨论】:

    • 好吧,不要成为害虫,只是为了避免任何潜在的混乱,这不是我在 40 分钟前所说的吗?
    • @AndreiBodnarescu 虽然有相似之处,但我觉得有些地方可以补充。因此我的回应。我看不出我提出的一些建议是如何引起“混乱”的。为了更好地衡量,我也进行了编辑以参考您的答案。
    • 酷,感谢您的澄清。你知道我不是在讽刺,我真的想知道我是否遗漏了什么,或者我们的答案有些相似。无论如何,你的更重要,所以+1。
    • 两个项目都是战争类型,都建立在同一台机器上。我使用 install 来构建项目,但确实我没有增加版本号。目前是项目的开始,我正在做很多小的更改和测试等等,所以我认为这不能证明增加版本号是合理的。
    【解决方案2】:

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

    在构建 maven 项目时,最好使用 Maven(例如使用 mvn package 等命令)而不是使用其他构建工具(例如 Eclipse)来构建它。如果您想使用 Maven 构建它,但要使用 Eclipse GUI,您可以从以下位置安装 m2_eclipse 插件:

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

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

    最后一点,在 one aboce 这样的设置中,理想情况下,您应该创建一个父 Maven 项目(打包为“pom”),该项目具有子项目 B 和 A(按此顺序)。这样,如果您在两个项目中都修改了内容,并且希望使用最新的 modif 构建所有内容,则只需在父 pom 上进行 maven 安装,Maven 将处理所有事情。

    【讨论】:

    • 其实我已经有这个设置了。我确实有 m2eclipse,但我想做的是让 Eclipse 处理部署,这样我就可以直接从 Eclipse 部署和运行项目。毕竟,Eclipse 应该是一个集成开发环境(强调集成)。所以我想让它处理一切——编辑、编译、构建、部署、运行服务器和调试。以我目前的设置,我无法从 Eclipse 进行部署(如果您只有一个 Web 项目,您可以毫无问题地进行部署)。
    • 是的,你可以,我从 Eclipse 做你想要的完全相同的事情。这是一个实际的例子:我有一个使用 Jetty 插件配置的 mvn 项目,对,所以如果我在命令行中执行 mvn jetty:run 它将在 jetty 中启动,并且我在 Eclipse 中所做的任何修改都将被热部署.现在,我在 Eclipse 中制作了一个自定义的 Maven 运行器,它只执行那个 mvn jetty:run 命令。这样我就可以从 eclipse 运行它了。
    • m2eclipse 插件由 Sonatype 捐赠给 Eclipse 基金会。更新版本的插件可从eclipse.org/m2e 获得
    • M2E 本身并不能解决 WAR 覆盖问题。为此,您需要名为 M2E-WTP (github.com/sonatype/m2eclipse-wtp/wiki) 的 M2E 连接器,它可以通过 Preferences-&gt;Maven-&gt;Discovery-&gt;Catalog 从 Eclipse 中安装。作为替代方案,您可以直接从其更新站点获取 M2E-WTP。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 2012-01-19
    • 2012-04-16
    • 2013-02-15
    • 2015-02-23
    • 2013-12-28
    相关资源
    最近更新 更多