Maven如何查找依赖项

时间:2017-09-14 13:11:19

标签: java maven pom.xml

我已经阅读了许多关于Maven入门的文档和教程。但很少有事情对我来说仍然不清楚:

1)当pom.xml包含<dependency>时,Maven会将该工件/ JAr放在Maven本地存储库中。对吗?

2)假设我在MAven项目中有子模块。那么构建项目的正确方法是什么?一个应该从父模块开始,然后转到更多的子模块。对 ?那么maven会创建依赖jar并将它们放在Maven Repo本地文件夹中吗?

3)例如,如果我的子模块pom.xml包含以下依赖项。我应该如何向Maven提供它(vd-ps.jar)以便Maven在Submodule / pom.xml上进行Maven clean安装时找到它?我的意思是说Maven需要什么,或者从哪里生成这样的用户定义的vd-ps.jar?来自编译的类文件?

<dependencies>
    <dependency>
        <groupId>com.b.t</groupId>
        <artifactId>vd-ps</artifactId>
        <version>1.1.0</version>
    </dependency>
  </dependencies>

好的,让我直接询问我想要实现的目标:我有以下pom.xml。从中我想创建一个单独的maven项目(Say PTest),它使用另一个大型多模块maven项目的依赖项(jars)。这里: - 我的多模块项目中有一个名为v-parent的模块,在其trunk文件夹中有pom.xml。

<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>
  <parent>
    <groupId>com.b.t</groupId>
    <artifactId>v-parent</artifactId>
    <version>3.9.0</version>
  </parent>


    <groupId>com.b.t.test</groupId>
      <artifactId>p_test</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <name>ptesting</name>
      <dependencies>
        <dependency>
            <groupId>com.b.t</groupId>
            <artifactId>v-ps</artifactId>
            <version>1.1.0</version>
        </dependency>
      </dependencies>
    </project>

1)现在我应该把这个子模块的v-parent放在eclipse中新创建的Maven项目(PTest)中?

我的意思是如何让我的PTest / pom.xml找到这个父jar v-parent.jar?

我有一个名为v-ps.jar的独立jar文件。我应该在哪里准确地(在哪个结构中)将它放在Maven本地仓库中以便它可以找到它?

2 个答案:

答案 0 :(得分:1)

每次运行

<p>Change Value to clear Textbox:
<select onchange="clearTextArea();">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>
</p>

<textarea style="width:100%;" id="fldAdditionalInformation" onkeyup="auto_grow(this)"></textarea>

您的项目将被构建,并且将安装生成的工件&#39;在您的本地存储库中(通常是〜/ .m2 / repository)。因此,如果您构建了一个生成jar com.b.t:vd-ps:1.1.0的项目,那么它将在您的本地存储库中可供其他项目用作依赖项。

如果依赖项位于同一父项下的另一个模块中,则可以包括如下:

mvn clean install

如果您运行

<dependency>
  <groupId>com.b.t</groupId>
  <artifactId>vd-ps</artifactId>
  <version>${project.version)</version>
</dependency>

如果你的pom.xml中有正确的配置,你的工件将被构建并部署到远程存储库(Nexus或Artifactory或类似工具)

请参阅https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

答案 1 :(得分:0)

1)现在我应该把这个子模块的v-parent放在eclipse中新创建的Maven项目(PTest)中? 我的意思是如何让我的PTest / pom.xml找到这个父jar v-parent.jar?

所以在这种情况下&#34; v-parent&#34;将是Eclipse中包装类型&#34; pom&#34;的另一个项目。如果你想构建子项目&#34; p_test&#34;及其依赖&#34; v-ps&#34;,您可以将它们列为&#34; v-parent&#34;中的模块。项目的pom文件如下:

<project>
  <groupId>com.b.t</groupId>
  <artifactId>v-parent</artifactId>
  <version>3.9.0</version>
  <packaging>pom</packaging>

  <modules>
    <module>p_test</module> <!-- Make sure you provide the right path here -->
    <module>v-ps</module> <!-- Make sure you provide the right path here -->
  </modules>
</project>

现在当你运行&#34; mvn clean install&#34; on&#34; v-parent&#34;它应该建立&#34; p_test&#34;和&#34; v-ps&#34;项目并将他们的jar文件的副本放在您当地的.m2 /存储库中,假设这些项目在构建期间不会出错。因此,父项目就像子项目的聚合一样,有助于一次性构建它们。

我有一个名为v-ps.jar的独立jar文件。我应该在哪里准确地(在哪个结构中)将它放在Maven本地仓库中以便它可以找到它?

如果您拥有此项目的来源,那么您应该将其作为&#34; v-parent&#34;的一部分包含在内。如上所述,将project的pom作为模块,当你构建父项时,成功时,jar会被写入你当地的.m2 repo。或者如果你有&#34; v-ps&#34;的来源。项目,您可以使用&#34; mvn clean install&#34;直接构建它。并且罐子将写入回购。