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个工件:
(jar)、sharedapi
(war)、webapp
(jar)。后者2依赖于共享apidesktop-swing-app
- 此时此刻,我正在努力使web应用程序部分正常工作。因此,我创建了4个pom:
(根pom)、eftracker
、eftracker父项
、eftracker共享
李>eftracker网络
- 如果我在
上运行eftracker
,所有的工作都很完美——我已经按照预期创建了mvn包
和eftracker shared.jar
eftracker web.war
- 我添加了
来运行带有maven目标的web应用程序tomcat7maven插件
,以测试开发过程中所做的更改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)
- 似乎每次更改共享项目(甚至在根模块上)时,我都必须
,然后才能在web app上执行mvn清理安装
,并查看最近的更改tomcat7:run
- 有可能使这个过程自动化吗
- …或者也许有其他方法可以最小化开发过程中的“maven开销”
<?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
文件夹中。请注意,如果更改源代码,Eclipse将自动更新这些类。/parent/target/classes
- 编辑Eclipse运行配置并选中“解析工作区工件”复选框
tomcat7:run
,它可以在不需要安装父项目的情况下运行
我建议您阅读有关的内容,特别是“项目聚合”部分。首先删除该模块
eftracker父级
,该模块应位于eftracker
(根模块)…然后清理pom文件(删除。/…
)。此外,删除maven war插件的配置只需从约定开始,即src/main/webapp
location和war文件的默认名称…(顺便说一句,使用较新版本。)。在父模块中定义所有插件版本…您应该仅使用mvn clean package
从根模块构建…如果这不起作用,则会出现问题…如果在工作区中签出依赖项项目,并且依赖项的版本为SN,Eclipse会自动解析工作区中的maven依赖项APSHOT版本。我不确定是否有常规的Eclipse发行版。但我使用STS,它预装了m2e插件。