Eclipse中的Maven多模块项目

了解如何在Eclipse IDE中创建多模块Maven项目。在本Maven教程中,我们将学习在eclipse中创建嵌套的Maven项目

1.创建多模块Maven项目

让我们创建一个包含包装earwarjar类型模块的Maven项目。我们正在创建企业应用程序的结构,其中应用程序将作为EAR(企业应用程序获取)文件部署到应用程序服务器(例如weblogic,websphere)。

该EAR将包含一个(或多个)WAR(Web应用程序资源)文件,并且每个war将包含服务项目,该服务项目对所有war文件和JAR(Java ARchive)打包类型具有通用代码。

项目关系
项目关系

1.1。创建父项目-包装类型为“ pom”

在Eclipse中创建一个新的Maven项目。将其包装类型设置为“ pom ”。

创建新的Maven项目
创建新的Maven项目
填写Maven组ID和工件ID
填写Maven组ID和工件ID
将包装罐更改为pom
将包装罐更改为pom

1.2。创建Maven模块-包装类型为’ear’

在父项目中创建一个新的Maven模块。将其包装类型更改为'ear'。该模块可以具有maven耳插件,该插件最终将构建要在服务器上部署的耳文件。

创建新的Maven模块
创建新的Maven模块
添加模块名称
添加模块名称
填写原型详细信息
填写原型详细信息

1.3。创建Maven模块–打包类型为’war’和’jar’

与ear模块类似,为war文件和service jar文件再创建两个模块。分别更改其包装并添加maven插件。

1.4。最后结果

现在,在eclipse中观察最终的项目结构,并验证所有项目的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.how2codex.app</groupId>
	<artifactId>HelloWorldApp</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>

	<name>HelloWorldApp</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
	</properties>

	<modules>
		<module>web</module>
		<module>service</module>
		<module>ear</module>
	</modules>
</project>
<?xml version="1.0"?>
<project
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
	xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.how2codex.app</groupId>
		<artifactId>HelloWorldApp</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<artifactId>ear</artifactId>
	<name>ear</name>
	<packaging>ear</packaging>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	<dependencies>
		<dependency>
			<groupId>com.how2codex.app</groupId>
			<artifactId>web</artifactId>
			<version>0.0.1-SNAPSHOT</version>
			<type>war</type>
		</dependency>
	</dependencies>
	<build>
		<pluginManagement>
		<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-ear-plugin</artifactId>
			<version>3.0.1</version>
			<configuration>
				<modules>
					<webModule>
						<groupId>com.how2codex.app</groupId>
						<artifactId>web</artifactId>
						<uri>web-0.0.1-SNAPSHOT.war</uri>
						<!-- Set custom context root -->
						<contextRoot>/application</contextRoot>
					</webModule>
				</modules>
			</configuration>
		</plugin>
		</plugins>
		</pluginManagement>
	</build>
</project>

<?xml version="1.0"?>
<project
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
	xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.how2codex.app</groupId>
		<artifactId>HelloWorldApp</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<groupId>com.how2codex.app</groupId>
	<artifactId>web</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>web</name>
	<url>http://maven.apache.org</url>
	<packaging>war</packaging>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	<dependencies>
		<dependency>
			<groupId>com.how2codex.app</groupId>
			<artifactId>service</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
	</dependencies>
</project>
<?xml version="1.0"?>
<project
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
	xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.how2codex.app</groupId>
		<artifactId>HelloWorldApp</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<groupId>com.how2codex.app</groupId>
	<artifactId>service</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>service</name>
	<url>http://maven.apache.org</url>
	<packaging>jar</packaging>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
</project>

要生成项目,从控制台运行$ mvn clean install命令。

E:\devsetup\workspacetemp\HelloWorldApp>mvn clean install

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] HelloWorldApp                                                      [pom]
[INFO] service                                                            [jar]
[INFO] web                                                                [war]
[INFO] ear                                                                [ear]
[INFO]
...
...
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ service ---
[WARNING] JAR will be empty - no content was marked for inclusion!
[INFO] Building jar: E:\devsetup\workspacetemp\HelloWorldApp\service\target\service-0.0.1-SNAPSHOT.jar
[INFO]
...
...
[INFO] Packaging webapp
[INFO] Assembling webapp [web] in [E:\devsetup\workspacetemp\HelloWorldApp\web\target\web-0.0.1-SNAPSHOT]
[INFO] Processing war project
[INFO] Copying webapp resources [E:\devsetup\workspacetemp\HelloWorldApp\web\src\main\webapp]
[INFO] Webapp assembled in [47 msecs]
[INFO] Building war: E:\devsetup\workspacetemp\HelloWorldApp\web\target\web-0.0.1-SNAPSHOT.war
[INFO] WEB-INF\web.xml already added, skipping
[INFO]
...
...
[INFO]
[INFO] --- maven-ear-plugin:3.0.1:ear (default-ear) @ ear ---
[INFO] Copying artifact [war:com.how2codex.app:web:0.0.1-SNAPSHOT] to [web-0.0.1-SNAPSHOT.war]
[INFO] Copy ear sources to E:\devsetup\workspacetemp\HelloWorldApp\ear\target\ear-0.0.1-SNAPSHOT
[INFO] Building jar: E:\devsetup\workspacetemp\HelloWorldApp\ear\target\ear-0.0.1-SNAPSHOT.ear
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] HelloWorldApp 0.0.1-SNAPSHOT ......................。 SUCCESS [  0.328 s]
[INFO] service ...........................................。 SUCCESS [  0.839 s]
[INFO] web ...............................................。 SUCCESS [  0.838 s]
[INFO] ear 0.0.1-SNAPSHOT ................................。 SUCCESS [  0.588 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.749 s
[INFO] Finished at: 2018-11-18T15:04:52+05:30
[INFO] ------------------------------------------------------------------------

构建会生成一个名为name的ear文件ear-0.0.1-SNAPSHOT.ear。可以根据需要随意更改项目名称和生成的软件包。

2.常见问题

2.1。GroupId与父groupId重复

Maven子项目从父项目继承属性。如果任何Maven模块/项目的组ID或版本ID与父项目相同,那么我们只需删除此条目即可。

删除重复的条目
删除重复的条目

2.2。工件不是项目的依赖项

在未指定type属性的情况下添加模块依赖项(war)时,我们可能会遇到此错误。

模块类型属性
模块类型属性

让我丢下与在Eclipse IDE中创建多模块Maven项目有关的问题。

saigon has written 1445 articles

Leave a Reply