maven-2 - Maven Java EE 和模块项目 pom

标签 maven-2 maven

我是 Maven 新手。

我有一个Java EE Web项目和一个模型项目,Web项目依赖于模型,因为模块有一些标准类需要在Web中jar。

web 需要模型 jar 文件。

我如何编写两个项目,其中一个项目依赖于另一个项目?

给我两个项目 pom 上的示例编码。

最佳答案

典型的 Maven 多模块项目结构将涉及 3 个模块:一个聚合父模块(允许在所有模块上启动多模块构建)、模型模块和网络模块。像这样的事情:

.
├── mymodule
│   ├── pom.xml
│   └── src
│       ├── main
│       │   ├── java
│       │   └── resources
│       └── test
│           ├── java
│           └── resources
├── mywebapp
│   ├── pom.xml
│   └── src
│       └── main
│           ├── resources
│           └── webapp
│               ├── index.jsp
│               └── WEB-INF
│                   └── web.xml
└── pom.xml

Where the parent pom.xml (at the root) would be like this:

<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.stackoverflow</groupId>
  <artifactId>Q4176120</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>Q4176120 - Parent POM</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    ...
  </dependencies>
  <modules>
    <module>mywebapp</module>
    <module>mymodule</module>
  </modules>
</project>

mymodule/pom.xml将是一个常规的 POM:

<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>
  <parent>
    <artifactId>Q4176120</artifactId>
    <groupId>com.stackoverflow</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <!--groupId>com.stackoverflow</groupId--> <!-- inherited -->
  <artifactId>mymodule</artifactId>
  <packaging>jar</packaging>
  <name>Q4176120 - Module</name>
  <dependencies>
    ...
  </dependencies>
</project>

mywebapp/pom.xml将声明对 mymodule Artifact 的依赖关系:

<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>
  <parent>
    <artifactId>Q4176120</artifactId>
    <groupId>com.stackoverflow</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <!--groupId>com.stackoverflow</groupId--> <!-- inherited -->
  <artifactId>mywebapp</artifactId>
  <packaging>war</packaging>
  <name>Q4176120 - Maven Webapp</name>
  <dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>mymodule</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>Q4176120</finalName>
  </build>
</project>

通过这种结构,您可以从父目录启动多模块构建,即在所有模块上运行目标(maven 将计算正确的构建顺序):

$ mvn install
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] Q4176120 Parent POM
[INFO] Q4176120 Module
[INFO] Q4176120 Maven Webapp
[INFO]                                                                         
...

请注意,我还在上述示例中使用了继承(mymodulemywebapp<parent> 元素中声明的父级继承),因此我可以将公共(public)部分分组到父 POM 中并避免重复。这不是强制性的,您可以使用聚合而不使用继承,但这非常方便,并且聚合和继承在实践中经常结合在一起。

资源

关于maven-2 - Maven Java EE 和模块项目 pom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4176120/

相关文章:

java - 使用maven将jar加载到项目中

java - JBoss 上使用 Maven 的 Eclipse Web 应用程序部署问题

gwt - javax/validation/Path GET Java Maven 转换

java - 为 clojure 源文件启用 UTF-8 编码

java - 如何在桌面应用程序的 pom.xml 中仅配置一次 <manifest>

java - 如何使用 maven-assembly-plugin 包含 package.jar

java - 如何在 java 中使用 AlchemyAPI?

java - 延迟 EL 未得到解决

java - 为什么jdk 1.5无法加载使用maven创建的jar? (版本号错误)

maven - JSF Base64 错误?