是什么在POM XML的依赖和插件标签之间的行家有什么区别?是什么在POM XML的依赖和插件标签之

2019-05-12 15:57发布

我是新来的行家工具,我与Spring和Hibernate的一个项目,他们在pom.xml中作为插件配置,但JUnit是在依赖标记。 我的问题是什么是一个落后的插件,一个作为依赖的逻辑是什么?

Answer 1:

这两个插件和依赖的JAR文件。

但它们之间的区别是,大多数行家使用插件完成的工作; 而依赖只是将在执行任务被添加到类路径的JAR文件。

例如,您可以使用编译器插件来编译java文件。 不能使用编译器插件的依赖,因为这只会插件添加到类路径,并不会引发任何编译。 该JAR文件在编译文件,将被指定为依赖被添加到类路径。

同去与你的场景。 您必须使用弹簧插件来执行一些春天的可执行文件[我不知道使用什么弹簧插件。 我只是采取了猜测这里。 但是,你需要依赖于执行这些可执行文件。 和JUnit是下依赖性因为它是用来通过万无一失-插件用于执行单元测试标记。

因此,我们可以说,插件是执行任务的JAR文件,和依赖是它提供的类文件,执行该任务的罐子。

希望这能回答你的问题!



Answer 2:

行家本身可以被描述为具有可以被用于实现不同的任务许多不同的单位食物处理器。 这些单元称为插件。 例如,编译项目Maven使用maven-compiler-plugin ,运行测试- maven-surefire-plugin等。

在依赖行家而言是一种包装件类,你的项目依赖。 它可以是罐子,战争等。例如,如果你希望能够写JUnit测试,你将不得不使用JUnit标注和类所以你必须声明你的项目依赖JUnit的。



Answer 3:

插件和依赖是非常不同的事情,这是相辅相成的。

什么插件是?

插件执行任务的Maven构建。 这些都不是封装在应用程序。

这是Maven的的心脏。
Maven的执行任何任务由插件进行 。
有两种类型的插件: 在buildreporting插件 :

  • 构建插件将在生成过程中被执行,并且它们应该在被配置<build/>从POM元件。
  • 报告插件将现场生成期间被执行,并且它们应该在被配置<reporting/从POM>元素。

根据在命令行(例如规定的行家目标mvn cleanmvn clean packagemvn site ), 一个特定的生命周期将被用于和一组特定的插件目标将被执行。
有三个内置构建生命周期: defaultcleansite 。 在default的生命周期处理你的项目部署,将clean生命周期处理项目的清洗,而site的生命周期处理你的项目站点文档的创建。

一个插件目标可以绑定到特定的生命周期的特定阶段。
例如, maven-compiler-plugin默认绑定compile目标的生命周期阶段: compile
大多数的Maven插件(包括核心插件和第三方插件)在配置青睐约定。 因此,这些通常结合一个插件目标到一个特定的阶段,使它们的使用更简单。

这是整洁且不易出错:

<plugin>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.7.0</version>
</plugin>

比:

<plugin>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.7.0</version>
  <executions>
    <execution>
        <phase>compile</phase>
        <goals>
            <goal>compile</goal>
        </goals>
    </execution>
  </executions>
</plugin>

什么依赖关系?

依赖关系是Maven生成过程中在所需的类路径Maven构件/组件。
这些可以被封装在应用程序但不一定(见scope下文)。

最依赖的是罐子,但这些也可能是其他类型的档案:战争,耳朵,测试-JAR,EJB客户端...或仍然POM或BOM。
在一个pom.xml,依赖性可以在多个位置指定:在<build><dependencies>的一部分, dependencies management一部分或静止plugin宣言 ! 事实上,一些插件可能需要在执行过程中有在classpath一些依赖。 这是不常见,但可能发生。
下面是从一个示例文档 ,显示该plugindependency可一起工作:

例如,Maven的Antrun插件1.2版使用Ant 1.6.5版本,如果你想运行这个插件时要使用最新版本的Ant,你需要添加<dependencies>像以下元素:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.2</version>
        ...
        <dependencies>
          <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant</artifactId>
            <version>1.7.1</version>
          </dependency>
          <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant-launcher</artifactId>
            <version>1.7.1</version>
          </dependency>
         </dependencies>
      </plugin>
    </plugins>
  </build>
  ...
</project>

在Maven中依赖是在一个特定的格式参考:
groupId:artifactId:packaging:classifier:version
分类器(即是可选的)和包装( JAR默认情况下)通常不指定。 所以在共同的格式dependency声明是相当: groupId:artifactId:version
以下是在声明的依赖性的一个例子的<build><dependencies>部分:

<build>
   <dependencies>
      <dependency>
         <groupId>org.hibernate</groupId>
         <artifactId>hibernate-core</artifactId>
         <version>5.2.14.Final</version>
      </dependency>
   <dependencies>
</build>

相反,一个插件,依赖的涵盖范围。
默认范围是compile 。 这是最常用的范围(约定优于配置再次)。
compile范围意味着该依赖性在一个项目的所有类路径可用。

范围定义了类路径的依赖应添加。 例如我们需要在编译和运行时,或仅用于测试编译和执行?

例如,我们先前定义Hibernate作为一个compile依赖,因为我们需要它无处不在:源代码编译,测试编译,运行时间等进行....
但是,我们不希望这样的测试库可以被打包在应用程序或在源代码中被引用。 所以我们指定的test为他们的范围:

<build>
   <dependencies>
     <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.1.0</version>
        <scope>test</scope>
     </dependency>
   <dependencies>
</build>


Answer 4:

插件用于添加功能性至Maven本身(如添加eclipse支持或SpringBoot到支持Maven等)。 依赖关系是由源代码需要通过任何Maven的相位( compiletest例如)。 在的情况下, JUnit ,因为测试代码基本上是你的代码库的一部分,您拨打JUnit测试套件中的特定命令,并且不提供这些命令Java SDK因此JUnit必须出现在当时Maven处于测试阶段,这是通过提处理JUnit为您的依赖关系pom.xml文件。



Answer 5:

如果你是从前端的背景和我一样到来,并熟悉步兵和NPM,认为它是这样的:

首先,你可以运行,比如, npm install grunt-contrib-copy --save-dev 。 这就好比行家的<dependency></dependency> 。 它下载到执行构建任务所需的文件。

然后,你将配置Gruntfile.js任务

copy: {
  main: {
    src: 'src/*',
    dest: 'dest/',
  },
}

这就好比行家的<plugin>/<plugin> 。 你说的是构建工具做什么用的NPM /下载的代码<dependency></dependency>

当然,这并不是一个确切的比喻,但足以帮助你的包裹头部周围。



Answer 6:

Maven的在它的心脏是一个插件执行框架 - 按照正式和标准的紧凑型定义。 为了使它更清楚,你使用像命令maven-install/clean/compile/build etc创建/执行罐子,我们有时手动运行了。 所以,你要运行(或配置或执行),你基本上把他们内行的依赖性标签的东西POM和答案,以谁将会运行这些依赖关系(必需的环境设置)是插件。

        javac (compiler) dependency.java (dependency) 


文章来源: What is the difference in maven between dependency and plugin tags in pom xml?