【问题标题】:maven naming convention 32 vs 64 bit and windows vs linuxmaven 命名约定 32 vs 64 位和 windows vs linux
【发布时间】:2012-12-11 14:57:22
【问题描述】:

我有一个有 4 个不同版本的库:32 位和 64 位 Windows 以及 32 和 64 位 linux。在将它们上传到 Maven 存储库时,我试图弄清楚每个库的名称。现在我有:

  <!--windows 32bit -->
  <groupId>com.lib-name.win</groupId>
  <artifactId>lib-name</artifactId>
  <classifier>x86<classifier>
  <version>10</version>

  <!--windows 64bit -->
  <groupId>com.lib-name.win</groupId>
  <artifactId>lib-name</artifactId>
  <classifier>x86-64<classifier>
  <version>10</version>

  <!--linux 32bit -->
  <groupId>com.lib-name.nix</groupId>
  <artifactId>lib-name</artifactId>
  <classifier>x86<classifier>
  <version>10</version>

  <!--linux 64bit -->
  <groupId>com.lib-name.nix</groupId>
  <artifactId>lib-name</artifactId>
  <classifier>x86-64<classifier>
  <version>10</version>

对于这种情况,是否有一种更标准的方式来为 maven 中的罐子命名?还是我走在正确的轨道上?

【问题讨论】:

  • 我不知道该领域的任何约定。我想,您应该只关心用户了解他必须使用哪个库这一事实:)
  • 谢谢!我认为对于所有 4 个版本(因为它们实际上是同一件事)具有相同的 groupId 和 artifactId 并具有 4 个不同的分类器(x86-win、x86-64-win、x86-nix、x86-)可能更合适64 位)。想看看这两种方法有没有缺点。
  • 嗯,只有groupIdartifactId 的想法也不错。

标签: java maven dependencies


【解决方案1】:

来自http://maven.apache.org/pom.html

分类器: 分类器允许区分从相同 POM 构建但内容不同的工件。它是一些可选且任意的字符串,如果存在的话,它会被附加到工件名称之后,紧跟在版本号之后。

作为这个元素的动机,例如,考虑一个项目,它提供了一个针对 JRE 1.5 的工件,但同时也提供了一个仍然支持 JRE 1.4 的工件。第一个工件可以配备分类器 jdk15,第二个工件配备 jdk14,以便客户端可以选择使用哪一个。

后一段表明他们希望分类器执行您想到的任务。

但是,根据我的经验,我遇到的大多数项目都会为项目的每个脉络发布单独的工件。我个人更喜欢这种方法,但这只是个人喜好问题。

【讨论】:

  • 你能给我一个“项目的每个脉络的单独工件”的例子吗?我很想知道解决这个问题的流行方法是什么。
  • 首先想到的是 BouncyCastle,它为不同的 Java 版本生成变体:repo2.maven.org/maven2/org/bouncycastle
  • 只是我正在寻找的例子 :) 谢谢!
【解决方案2】:

我认为使用具有不同分类器的相同组和工件 ID 是最简洁的方法。想想 Maven 源插件(它只是另一个分类器)是如何发布源 jar 的。也看看这个:

One Artifact for different configurations

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    相关资源
    最近更新 更多