Java Maven pom文件,它在做什么?

Java Maven pom文件,它在做什么?,java,maven,Java,Maven,我刚刚开始以新手的身份使用Maven,只是想了解一些关于依赖性的知识。 我正在尝试使用iText和pdf输出功能构建一个micro web服务。 因此,我的第一步是看看是否可以从一个非常简单的Java程序中获得pdf输出 在我的pom文件中,我有以下依赖项: <!-- iText Core --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext

我刚刚开始以新手的身份使用Maven,只是想了解一些关于依赖性的知识。 我正在尝试使用iText和pdf输出功能构建一个micro web服务。 因此,我的第一步是看看是否可以从一个非常简单的Java程序中获得pdf输出

在我的pom文件中,我有以下依赖项:

<!-- iText Core -->
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext7-core</artifactId>
    <version>${itext.version}</version>
    <type>pom</type>
</dependency>

<!-- iText pdfHTML add-on -->
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>html2pdf</artifactId>
    <version>2.1.6</version>
  </dependency>

com.itextpdf
itext7核
${itext.version}
聚甲醛
com.itextpdf
html2pdf
2.1.6
在阅读了Maven站点上的信息之后,pom文件应该完成获取依赖项的所有繁重工作,这是我有点困惑的地方。 pom文件是否会在应用程序启动时将文件物理下载到应用程序位置,以便应用程序可以利用这些文件


如果是这种情况,它似乎没有这样做,那么我是否在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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>my-app</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    <itext.version>RELEASE</itext.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <!-- iText Core -->
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itext7-core</artifactId>
        <version>${itext.version}</version>
        <type>pom</type>
    </dependency>

    <!-- iText pdfHTML add-on -->
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>html2pdf</artifactId>
        <version>2.1.6</version>
      </dependency>   
  </dependencies>

  <build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.7.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

4.0.0
com.mycompany.app
我的应用程序
1.0-快照
我的应用程序
http://www.example.com
UTF-8
1.7
1.7
释放
朱尼特
朱尼特
4.11
测试
com.itextpdf
itext7核
${itext.version}
聚甲醛
com.itextpdf
html2pdf
2.1.6
maven清洁插件
3.1.0
maven资源插件
3.0.2
maven编译器插件
3.8.0
maven surefire插件
2.22.1
maven jar插件
3.0.2
maven安装插件
2.5.2
maven部署插件
2.8.2
maven站点插件
3.7.1
maven项目信息报告插件
3.0.0
谢谢你的帮助。
谢谢

执行maven build时,maven会自动将所有依赖项jar下载到本地存储库中

Maven的本地存储库是开发人员机器上的一个文件夹位置,所有项目工件都存储在本地

通常该文件夹名为.m2

此处是此文件夹的默认路径–基于操作系统:

Windows:C:\Users\User\u Name\.m2

Linux:/home/User\u Name/.m2

Mac:/Users/user\u name/.m2


Maven将依赖项下载到本地m2存储库。但这更多是为了构建应用程序,而不是为了运行

您想要的(复制输出jar旁边的依赖项)可以通过目标依赖项来实现:复制依赖项

请参阅此博客帖子:


管理依赖关系是Maven的关键功能之一

依赖关系管理:可以定义对其他对象的依赖关系 项目。在构建过程中,Maven构建系统解析 如果需要,它还构建依赖项目

解析依赖项并不意味着它将下载本地系统中所有指定的JAR

Maven工具读取pom文件并解析 这个项目。Maven验证所需的组件是否在 本地存储库。本地存储库位于.m2/repository中 用户主目录的文件夹

请注意,.m2/是一个隐藏文件夹。如果您使用的是Linux,那么路径应该是/home/someuser/.m2


然而,如果它根本没有下载JAR或创建.m2目录,那么要么你没有正确地构建项目,要么你没有连接到互联网。

“它似乎没有这样做”是非常模糊的。你到底做了什么?你犯了什么错误?POM什么也没做;这是一个描述(“模型”)。Maven Reactor通常通过命令行中的
mvn
来完成这些工作。谢谢Daniel,所以当我在Maven中为项目运行package命令时,依赖项文件是否会打包到jar文件中?@jeeperscropers当您运行mvn安装时,jar将存储在项目的每个版本的本地存储库中谢谢您的回答,这对我的理解非常有帮助。