多模块项目和maven中心

时间:2014-12-26 06:03:37

标签: java maven packaging maven-central

我正在计划一个多模块的maven项目。

父POM定义了两个模块,A和B

  • 模块A需要从命令行执行才能显示AWT JDialog。
  • 模块B将是一个普通的jar,其客户端下载了12个依赖项(即未打包)
  • 模块B需要依赖于模块A.
  • 希望尽可能减少罐子在Maven Central上的分发。

我的问题:
1.多模块maven项目是否是实现这些目标的正确方法? 2.两个模块是否需要单独发布到maven central?

1 个答案:

答案 0 :(得分:2)

这看起来像是多模块构建的典型场景。

.
├── mod-a
│   └── pom.xml
├── mod-b
│   └── pom.xml
└── pom.xml (parent)

父级只包含一个模块列表(两个),看起来像这样:

<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>

  <parent>
    <groupId>com.soebes.smpp</groupId>
    <artifactId>smpp</artifactId>
    <version>0.7.1</version>
  </parent>

  <groupId>com.soebes.training.first</groupId>
  <artifactId>project-parent</artifactId>
  <version>0.1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>Project : Parent</name>

  <scm>
   Define the SCM information here...
  </scm>

  <modules>
    <module>mod-a</module>
    <module>mod-b</module>
  </modules>

</project>

每个孩子应该看起来像这样:

<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>
    <groupId>com.soebes.training.first</groupId>
    <artifactId>project-parent</artifactId>
    <version>0.1.0-SNAPSHOT</version>
  </parent>

  <name>Project : Mod-A</name>
  <artifactId>mod-a</artifactId>

</project>

你的模块-b应该是这样的:

<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>
    <groupId>com.soebes.training.first</groupId>
    <artifactId>project-parent</artifactId>
    <version>0.1.0-SNAPSHOT</version>
  </parent>

  <name>Project : Mod-B</name>
  <artifactId>mod-b</artifactId>

  <dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>mod-a</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>

</project>

现在您可以从父模块构建,所有这些都应该部署到中央,并且不需要单独执行此操作,您可以一次性完成此操作...