1

我对 Maven 项目结构有些陌生。我正在创建一个项目,它将有两个罐子。两个 jar 都不相互依赖,但是,它们将使用一些相同的库,并且我创建了两个帮助程序类(一个用于日志记录),它们将在两者中使用。

就项目结构而言,我一直在遵循本指南: http ://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

我目前的项目只有一个模块。我正在使用 IntelliJ IDE 创建我的 build.xml(使用 ANT)来创建我的罐子。然而,IntelliJ build.xml 并没有立即工作,我必须进行一些手动编辑才能让它构建两个 jar。我相信如果每个 jar 都在它自己的模块中,这将得到解决。另外,根据以下内容,它们似乎应该是 http://www.jetbrains.com/idea/webhelp/module.html

这是我有点困惑的地方。如果我确实为我的第二个 jar 创建了第二个模块,我该如何处理两个模块共享的类?每当我去创建一个新模块时,IntelliJ 都会为新模块提供它自己的 src/ 路径。

正如我所说,我是 Maven 项目结构的新手。我对 ant 和使用 build.xml 构建 jar 也很陌生。如果我完全走错了路,请告诉我,以便我尽早解决此问题。

提前谢谢。

4

2 回答 2

5

创建一个包含 pom.xml 的多模块项目 (x),其中包含 Packaging = 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>
  <groupId>test</groupId>
  <artifactId>x</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <modules>
    <module>x1</module>
    <module>x2</module>
  </modules>
</project>

和 2 个常规(jar)项目(x1 和 x2)。这就是项目结构的样子

x
  x1
    ...
    pom.xml
  x2
    ...
    pom.xml
pom.xml

主项目 pom 应该包含两个模块共有的依赖项。嵌套项目 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>
    <groupId>test</groupId>
    <artifactId>x</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>x1</artifactId>
</project>

在此处查看更多信息http://maven.apache.org/guides/mini/guide-multiple-modules.html

于 2013-08-12T13:03:23.847 回答
2

如果你打算以 maven 方式做事,你应该记住每个(maven-)项目只构建一个工件。因此,如果您想构建两个 jar,您将需要两个 maven 项目(p1,p2),每个项目都有自己的 pom.xml。

如果你有一些被这两个项目使用的类,他们将不得不去他们自己的 maven-project 以及构建他们自己的 module-jar (p3)。然后 p3 将作为依赖项包含在 p1 和 p2 中。

要一次性构建这些 jarr,您可以使用 Evgeniy Dorofeev 建议的模块布局

于 2013-08-12T13:05:22.393 回答