Java 如何配置Eclipse来自动解析和构建多个maven模块?

Java 如何配置Eclipse来自动解析和构建多个maven模块?,java,eclipse,maven,Java,Eclipse,Maven,以下是我的情况: 我正在尝试从Ant迁移到Maven 我的项目有3个工件:sharedapi(jar)、webapp(war)、desktop-swing-app(jar)。后者2依赖于共享api 此时此刻,我正在努力使web应用程序部分正常工作。因此,我创建了4个pom:eftracker(根pom)、eftracker父项、eftracker共享、eftracker网络 如果我在eftracker上运行mvn包,所有的工作都很完美——我已经按照预期创建了eftracker shared.j

以下是我的情况:

  • 我正在尝试从Ant迁移到Maven
  • 我的项目有3个工件:
    sharedapi
    (jar)、
    webapp
    (war)、
    desktop-swing-app
    (jar)。后者2依赖于共享api
  • 此时此刻,我正在努力使web应用程序部分正常工作。因此,我创建了4个pom:
    eftracker
    (根pom)、
    eftracker父项
    eftracker共享
    eftracker网络
  • 如果我在
    eftracker
    上运行
    mvn包
    ,所有的工作都很完美——我已经按照预期创建了
    eftracker shared.jar
    eftracker web.war
  • 我添加了
    tomcat7maven插件
    来运行带有maven目标的web应用程序
    tomcat7:run
    ,以测试开发过程中所做的更改
  • 我还将
    eftracker shared
    作为项目添加到
    eftracker web
    构建路径
我的目标:

  • 现在我想在Eclipse中舒适地工作,这意味着我想更改文件,点击Run并在几秒钟内测试我的更改
  • 在开发过程中,我将同时更改:共享项目和web项目
我的问题:

  • 如果我从未运行过
    mvn install
    ,那么尝试调用
    tomcat7:run
    将导致错误:
    无法在project eftracker web上执行目标:无法解析project com的依赖项。skarpushin:eftracker web:war:1.503.0:无法在central中找到工件com。skarpushin:eftracker共享:jar:1.503.0(https://repo.maven.apache.org/maven2)
  • 似乎每次更改共享项目(甚至在根模块上)时,我都必须
    mvn清理安装
    ,然后才能在web app上执行
    tomcat7:run
    ,并查看最近的更改
问题是:

  • 有可能使这个过程自动化吗
  • …或者也许有其他方法可以最小化开发过程中的“maven开销”
eftracker.pom

<?xml version="1.0"?>
<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>com.skarpushin</groupId>
    <artifactId>eftracker</artifactId>
    <version>1.503.0</version>
    <packaging>pom</packaging>

    <name>eftracker</name>

    <modules>
        <module>eftracker-parent</module>
        <module>eftracker-shared</module>
        <module>eftracker-web</module>
    </modules>

    <properties>
        <maven.deploy.skip>true</maven.deploy.skip>
    </properties>
</project>

4.0.0
com.skarpushin
eftracker
1.503.0
聚甲醛
eftracker
eftracker父项
eftracker共享
eftracker网络
真的
eftracker parent/pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>

    <groupId>com.skarpushin</groupId>
    <version>1.503.0</version>
    <artifactId>eftracker-parent</artifactId>
    <packaging>pom</packaging>
    <name>eftracker-parent</name>

    <!-- ...some common properties, dependencies, build plugins... -->

</project>
<?xml version="1.0" encoding="UTF-8"?>
<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">

    <parent>
        <groupId>com.skarpushin</groupId>
        <artifactId>eftracker-parent</artifactId>
        <version>1.503.0</version>
        <relativePath>../eftracker-parent</relativePath>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>eftracker-web</artifactId>
    <packaging>war</packaging>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <path>/</path>
                    <port>8080</port>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <warSourceDirectory>src/main/webapp</warSourceDirectory>
                    <warName>ROOT##${project.version}</warName>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>com.skarpushin</groupId>
            <artifactId>eftracker-shared</artifactId>
            <version>${project.version}</version>
        </dependency>

        <!-- ...other deps -->

    </dependencies>

</project>

4.0.0
com.skarpushin
1.503.0
eftracker父项
聚甲醛
eftracker父项
eftrackerweb/pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>

    <groupId>com.skarpushin</groupId>
    <version>1.503.0</version>
    <artifactId>eftracker-parent</artifactId>
    <packaging>pom</packaging>
    <name>eftracker-parent</name>

    <!-- ...some common properties, dependencies, build plugins... -->

</project>
<?xml version="1.0" encoding="UTF-8"?>
<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">

    <parent>
        <groupId>com.skarpushin</groupId>
        <artifactId>eftracker-parent</artifactId>
        <version>1.503.0</version>
        <relativePath>../eftracker-parent</relativePath>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>eftracker-web</artifactId>
    <packaging>war</packaging>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <path>/</path>
                    <port>8080</port>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <warSourceDirectory>src/main/webapp</warSourceDirectory>
                    <warName>ROOT##${project.version}</warName>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>com.skarpushin</groupId>
            <artifactId>eftracker-shared</artifactId>
            <version>${project.version}</version>
        </dependency>

        <!-- ...other deps -->

    </dependencies>

</project>

com.skarpushin
eftracker父项
1.503.0
../eftracker父项
4.0.0
eftracker网络
战争
org.apache.tomcat.maven
tomcat7 maven插件
2.2
/
8080
org.apache.maven.plugins
maven战争插件
2.4
src/main/webapp
根##${project.version}
假的
com.skarpushin
eftracker共享
${project.version}
尝试使用M2Eclipse

M2Eclipse为ApacheMaven提供了与IDE的紧密集成 具有以下特点:

  • 从Eclipse中启动Maven构建
  • 基于Maven的pom.xml的Eclipse构建路径依赖关系管理
  • 从Eclipse工作区解析Maven依赖项,而无需安装到本地Maven存储库
  • 从远程Maven存储库自动下载所需的依赖项
  • 用于创建新Maven项目、pom.xml和在普通Java项目上启用Maven支持的向导
  • 在Maven远程存储库中快速搜索依赖项

因此,似乎需要做两件事:

  • 在父项目上运行
    mvn compile
    ,这样所有类都将显示在
    。/parent/target/classes
    文件夹中。请注意,如果更改源代码,Eclipse将自动更新这些类
  • 编辑Eclipse运行配置并选中“解析工作区工件”复选框
现在我可以以Maven build的形式运行这个项目了……目标是
tomcat7:run
,它可以在不需要安装父项目的情况下运行


我建议您阅读有关的内容,特别是“项目聚合”部分。首先删除该模块
eftracker父级
,该模块应位于
eftracker
(根模块)…然后清理pom文件(删除
。/…
)。此外,删除maven war插件的配置只需从约定开始,即
src/main/webapp
location和war文件的默认名称…(顺便说一句,使用较新版本。)。在父模块中定义所有插件版本…您应该仅使用
mvn clean package
从根模块构建…如果这不起作用,则会出现问题…如果在工作区中签出依赖项项目,并且依赖项的版本为SN,Eclipse会自动解析工作区中的maven依赖项APSHOT版本。我不确定是否有常规的Eclipse发行版。但我使用STS,它预装了m2e插件。