当前位置: 首页 > 面试题库 >

如何指定整个Maven的DistributionManagement组织?

钮安歌
2023-03-14
问题内容

我试图弄清楚如何组织许多(大约50多个)maven2项目,以便它们可以部署到中央关系存储库中。使用mvn deploy目标时,确实需要在distributionManagement标签中指定目标,如下所示:

<distributionManagement>
   <repository>
      <id>nexus-site</id>
        <url>http://central_nexus/server</url>
   </repository>
</distributionManagement>

现在,我不希望所有的50个以上pom.xml都包含一遍又一遍。虽然我的第一个settings.xml文件是文件,但似乎无法(通过设计)在此定义文件。因此,第一个问题是,为什么会这样呢?如果可能的话,我可以在maven2发行版的settings.xml中指定它,该发行版可以分发给所有开发人员。

我找到的唯一可能的解决方案是创建一个包含这些设置的组织范围的master-
pom项目,并通过<parent>标签使所有其他pom.xml依赖于此master-pom 。但这在多模块构建中看起来有些奇怪:

- master configuration POM (pm)
- Project 1 parent pom (p1 with module 1 and module 2 as modules)
    - Project 1 module pom (with pm as parent)
    - Project 2 module pom (with pm as parent)

通常,我在所有文档中都读到,模块poms应该使用父pom,而不是其他一些。但是,在阅读了有关Inheritance
v。Aggregation的Maven网站后,写道确实是有可能的。

我发现的一个问题是Maven网站生成,该设置似乎确实存在问题(如果模块没有直接的反向引用,则无法正确链接)

那么,这是一种有效的方法吗?还有其他更明显,更简单的解决方案吗?


问题答案:

最好的解决方案是为组织中的所有项目创建一个简单的父pom文件项目(带有“ pom”包装)。

<?xml version="1.0" encoding="UTF-8"?>
<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>

    <groupId>your.company</groupId>
    <artifactId>company-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <distributionManagement>
        <repository>
            <id>nexus-site</id>
            <url>http://central_nexus/server</url>
        </repository>
    </distributionManagement>

</project>

可以将其构建,发布并部署到您的本地关系,以便每个人都可以访问其工件。

现在,对于要使用它的所有项目,只需包括以下部分:

<parent>
  <groupId>your.company</groupId>
  <artifactId>company-parent</artifactId>
  <version>1.0.0</version>
</parent>

解决方案将使您可以轻松地将其他常见内容添加到公司的所有项目中。例如,如果您想将JUnit使用标准化为特定版本,那么这将是理想的选择。

如果您的项目使用具有自己父级的多模块结构,那么Maven还支持链继承,因此完全可以接受的是,使项目的父pom文件引用公司的父pom,并使项目的子模块甚至不知道您的父公司的母公司。

从您的示例项目结构中可以看到,您正在尝试将父项目置于与聚合器pom相同的级别。如果您的项目需要其自己的父级,则我发现的最佳方法是在与其他模块相同的级别上包含父级,并将聚合器pom.xml文件放在所有模块目录所在的根目录中。

- pom.xml (aggregator)
    - project-parent
    - project-module1
    - project-module2

使用此结构所要做的就是将父模块包含在聚合器中,并使用mvn install根目录中的来构建所有内容。

我们在我的组织中使用了这种精确的解决方案,它经受了时间的考验,并为我们很好地工作。



 类似资料:
  • 问题内容: 这让我感到难过,并认为我会向SO社区提出帮助。 用户想要选择所有以特定ID开头的订单,例如: 123 将返回 123 , 12345 , 1238790 等ID然而int列。 我正在使用nHibernate,目前我的行是: 但这只会使我返回123。我可以执行Restrictions.Like,但是它将转换为SQL LIKE子句,并且在int col上不起作用。 有任何想法吗? 编辑:对

  • 我有一组文件想放在。由< code>mvn编译生成的jar。不幸的是,我希望将它们放在. jar内的特定路径中。com/purple frog/expg lsl/castle/main . glsl格式的jar文件 如何在pom中指定此映射。xml?我不能在不影响其他程序员工作流程的情况下弄乱源项目的目录层次结构。

  • 给定一个整数数组和一个整数m,我如何找到所有包含m个奇整数的子数组?如果我的问题不充分,下面是对整个问题的更长描述。这个问题有比n^2更快的解决方案吗?下面的解决方案似乎是n^2,我不确定如何进一步优化它。 https://github.com/cem3394/hr-haskell/blob/master/beautifulsubarrays.hs

  • 问题内容: 目前,我的JDK设置为1.4.2。 要运行Maven 3,我需要1.5及更高版本。 除了更改环境变量之外,是否有任何方法可以指示我的Maven安装使用另一个已安装的JDK ? 问题答案: 那几乎就是这样做的方式。我假设您的意思是您不想更改全局JAVA_HOME。没关系。您只需要为Maven设置一个不同的JAVA_HOME。您可以通过在或(Linux)或(Windows)上创建一个文件,

  • Javadoc工具有一个名为“packagename”的命令行选项,允许您指定要记录的包名称。maven javadoc插件支持这个论点吗? 似乎maven支持所有选项作为配置属性,但Packagename不是一个选项,它是一个命令行参数,我看不到它在maven javadoc插件页面上列出。 maven插件确实支持subpackages选项,但这是不同的(它是递归的,而packagenames参

  • 我正在为Android使用登录。我有两个追加器,一个写文件,另一个用于logcat。 我如何给每个附加器不同的级别?我希望logcat是跟踪和文件是信息。