【问题标题】:maven define project as jarmaven 将项目定义为 jar
【发布时间】:2019-03-19 11:01:57
【问题描述】:

这个项目是一个库,一个我正在开发的框架,将通过 mavenrepository.com 以 jar 文件的形式分发。

我在page 的 1. 简介下读到了这篇文章。

maven jar 插件提供了构建 jars 文件的功能,如果 你定义你的项目被打包成一个jar文件,maven会 隐式调用此插件。我们不需要在里面定义它 pom.xml 会在maven需要的时候下载执行。

问题是如何将项目本身定义为 pom.xml 中的 jar。

默认情况下,我只想在 jar 中包含 src/main/java 文件。 src/test/java 不需要在 jar 中。

【问题讨论】:

  • 你不应该做任何事情,因为构建 jars 是 Maven 的默认设置。请注意src/main/java 中的源代码不会直接添加到jar 中,而是先编译,然后将编译后的类添加到jar 中。如果您想显式设置包装(它定义了工件的捆绑方式),您可以将<packaging>jar</packaging> 添加到您的 pom.xml(在“顶级”,即作为<project ...> 元素的直接子元素)。
  • 当我在 IntelliJ 中运行测试但在任何地方都没有 jar 文件时,我在目标文件夹下得到了一堆 .class 文件。 pom.xml 中是否有一个配置指定在project-dir/bin/Library.jar 下创建工件,之前我曾经在 IntelliJ 中定义它,但理想情况下我认为它应该在pom.xml
  • Maven 默认会在目标文件夹中创建jar。但是,这取决于实际的生命周期阶段是否已执行——IntelliJ 可能不会触发它,或者至少不总是触发它(如果 Maven 在您的路径上,请在命令行尝试mvn packagemvn install)。这是一个关于 maven 及其生命周期的问题有很多答案(也有一些不错的图像):stackoverflow.com/questions/26607834/…
  • 我已经安装了mvn,添加到路径中,运行mvn package,我确实在目标文件夹下看到了.jar 文件。 pom.xml 中是否有一些构建自动化可以将其放置在 bin 文件夹下以及自定义名称?
  • 当然可以通过一些配置来实现(参见stackoverflow.com/questions/6689511/…stackoverflow.com/questions/4238944/…)。但是,在许多情况下,这不是必需的,并且可能需要额外的配置来进一步构建步骤。为什么要/需要更改名称和输出位置?

标签: java maven


【解决方案1】:

我会根据要求总结我的 cmets:

默认情况下,Maven 将在项目的target 目录中构建一个 jar 文件。这发生在“包”生命周期阶段。

如果您想将包装显式设置为 jar,您可以将以下内容添加为 pom.xml 的 <project> 元素的子元素:

<packaging>jar</packaging>

有关生命周期的更多信息,请参阅:

与 Maven 中的几乎所有内容一样,可以通过或多或少的努力来定制结果。我不会重复它是如何完成的,但会提供有关这些主题的问题的链接:

请注意,由于可以通过配置更改这些设置,因此您应该有充分的理由这样做。每一次偏离约定(标准)都可能导致需要更多配置。

【讨论】:

  • 希望你能帮助我完成这个查询,我能够将 jar 上传到 maven,我还将 jar 复制/放置在 github repo 下的 bin 目录中,因为它是这个库的其他端口的习惯。我的问题是,我将 jar 文件放在那里很奇怪,还是应该删除它并让用户完全依赖于 maven 分发。
  • 基本上这个问题一直在我脑海中盘旋,因为你的评论 -> Why do you want/need to change the name and output location?
  • 嗯,我不确定我是否完全理解预期的设置,但我想说,如果你在 Maven Central 上分发你的库,那么依赖项也应该在那里部署。如果分类器可能帮助的那些依赖项有不同的端口,即提供标准版本作为默认依赖项,并让用户通过一些配置文件设置、手动排除和包含等覆盖它们。
  • 如果您的库是要手动构建的,那么在bin 目录中添加依赖项可能没问题,但如果没有构建这些依赖项,那么通过 Maven 提供它们似乎是更好的方法。
  • 好吧,我不能代表整个 Java 世界,但我很高兴依赖项仅在 Maven Central 中可用。这还具有额外的好处,即 jar 可以由社区进行安全审计,因此更容易将它们合并到需要此类审计的软件中。如果由于某种原因不能直接使用 Maven Central,则至少有 2 个其他选项:1)使用您自己的存储库管理器,例如 Nexus,它会从 Maven Central 获取缺少的依赖项并将它们缓存 2)手动下载 jar 并将它们添加到本地构建。
【解决方案2】:

将此标签放在项目的 pom.xml 中的&lt;project&gt; 标签下

    <packaging>jar</packaging>

【讨论】:

  • 你的意思是&lt;packaging&gt;jar&lt;/packaging&gt;?
猜你喜欢
  • 1970-01-01
  • 2014-02-05
  • 2017-11-18
  • 2012-08-13
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多