1

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

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

  • 模块 A 需要可从命令行执行以显示 AWT JDialog。
  • 模块 B 将是一个普通的 jar,其 12 多个依赖项由客户端下载(即未打包)
  • 模块 B 需要依赖于模块 A。
  • 想让 jar 尽可能小,以便在 Maven Central 上分发。

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

4

1 回答 1

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>

你的 module-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>

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

于 2014-12-26T15:20:38.847 回答