Maven 2 Maven-创建独立于父项目的子项目
我有点像Maven新手,我正在尝试建立一个Maven项目,它可以构建几个子项目,但仍然允许有人只获取一个子项目,并在没有父项目的情况下独立构建它Maven 2 Maven-创建独立于父项目的子项目,maven-2,Maven 2,我有点像Maven新手,我正在尝试建立一个Maven项目,它可以构建几个子项目,但仍然允许有人只获取一个子项目,并在没有父项目的情况下独立构建它 parentfolder ->pom.xml ->project1 ->pom.xml ->src ->project2 ->pom.xml ->src ->project3 ->pom.xml ->src 基本上,我希望有人能
parentfolder
->pom.xml
->project1
->pom.xml
->src
->project2
->pom.xml
->src
->project3
->pom.xml
->src
基本上,我希望有人能够签出parentfolder并进行mvn编译以构建所有项目,也希望有人能够签出project1并进行mvn编译以构建它
我已经尝试在顶级pom.xml中将子项目声明为模块
<modules>
<module>project1</module>
<module>project2</module>
<module>project3</module>
</modules>
项目1
项目2
项目3
但这似乎需要在子对象中声明父对象pom.xml信息。这使得子项目依赖于存在的父pom.xml,这是我想要避免的。必须在子项目中声明父pom及其版本 如果您的项目已声明父级,则它必须在生成中可用,因此其中一个模块必须是父pom,或者在存储库中可用。您似乎在说,您希望有人签出依赖于父级的项目,但没有访问父级的权限,并且仍然能够构建该项目,就像尝试构建一个没有依赖项的项目一样 使父pom可用的选项有:
- 设置公共maven存储库,将父pom部署到其中,并将存储库信息放入子pom中
- 您可以告诉maven在检查存储库之前在相对路径上查找父pom(这有助于您在尚未部署的父pom中进行本地更改)。因此,您可以在您的子项目中将svn:external或其等效项简化为父pom
pom.xml
中声明父项:
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>42</version>
</parent>
...
这意味着您将在此根项目上运行的每个命令都将在每个模块上执行(顺序由Maven 2 Reactor定义)。例如,如果在根项目上运行mvn clean install
,Maven 2将在根项目上运行此命令,然后在项目commons
,然后在client
上,最后在服务器上运行此命令
在这个概念中,您可以编译一个项目,而无需编译任何其他项目(当然,除非存在相互依赖关系)
下面是一个显示两个不同概念的模式:
在Maven:最终指南中,您对这两个概念有了更详细的解释。如果子项目使用标记(Maven继承),则子项目仅依赖于父项目。您不需要在子模块中使用标记。但是,如果希望模块从父pom继承公共元素,则必须使用maven继承
严格地说,如果您使用的是继承,并且只想构建一个子项目,那么父pom.xml不必存在于父目录中;只要maven能够在本地或远程存储库中找到父pom,它就会构建。在实践中,如果您的父pom发生了变化,您将必须解决如何让您的团队成员跟上父pom的最新情况。在我看来,问题在于Maven正在重载父标记。Maven文档一直告诉我继承和聚合是两件不同的事情,但它们都使用相同的标记来实现它们的功能。这确实不利于原始海报所要求的场景。人们可能想
从公共父级继承某些设置,但
有两个不同应用程序的版本共享一个公共组件
因此,我们对父母关系有两种不同的理解。首先是为每个模块提供设置的“父级”,其次是构建子模块的“父级”。因为后者有两个,所以这就发生了故障。亲子关系的两个概念相互阻碍。这个问题可以通过使用maven的而不是。你的意思是,如果你只想构建子模块,而不想继承任何父pom定义,你不必在子pom中使用标记?谁知道,那是7年前我回答这个问题时;)
<modules>
<module>commons</module>
<module>client</module>
<module>server</module>
...
</modules>