2017-09-14 137 views
0

我已经阅读了许多关于Maven入门的文档和教程。但很少有东西仍然不清楚:Maven如何寻找依赖关系

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

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

3)例如,如果我的子模块pom.xml包含以下依赖项。我应该如何将它(vd-ps.jar)提供给Maven,以便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项目的依赖项(jar)。这里: - 我的多模块项目中有一个名为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)现在我应该在哪里在Eclipse把这个子模块V-父母在我的新创建Maven项目(PTEST)?

我的意思是我该如何确切地让我的PTest/pom.xml找到这个父罐子v-parent.jar?

我有单独的名为v-ps.jar的jar文件。我应该在哪里准确地(在哪个结构中)将它放在Maven本地回购中,以便它能够找到它?

回答

1

每次运行

mvn clean install 

您的项目将建成并在您的本地存储库(通常〜/ .m2目录/库)所产生的假象将被“安装”。因此,如果您构建了使com.b.t:vd-ps:1.1.0这个jar的项目,那么这个项目将在您的本地存储库中可用,以供其他项目用作依赖项。

如果你依赖是另一个模块中它可以在包括像这样同一母公司下:

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

如果您运行

mvn clean deploy 

你的神器将建成并部署到远程(Nexus或Artifactory或类似的),只要你在你的pom.xml中有正确的配置

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

+0

如果说我无法解决工件:com.btvd-ps:1.1.0等,我检查它存在〜/ .m2/repository/b/t/vd-ps/1.1.0 /vd-ps-1-1-0.jar.lastupdated任何想法为什么不能找到它? – Ragini

+0

'.jar.lastupdated'不是JAR,只是一个标记文件。 – Tome

+0

我建议你删除目录〜/ .m2/repository/com/b/t/vd-ps/1.1.0并重新运行该项目的mvn build,然后检查你有没有制造商文件的jar文件正如@Tome所说。 –

0

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

所以在这种情况下,“v-parent”将成为Eclipse包装类型“pom”中的另一个项目。如果你想建立的子项目“p_test”,其依赖的“V-PS”,你可以列出他们作为“V父”项目的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> 

现在,当你在“v-parent”上运行“mvn clean install”,它应该建立“p_test”和“v-ps”项目并将他们的jar文件拷贝到本地.m2/repository中,假设这些项目不会在我们的过程中出错构建。因此,父项目就像子项目的集合一样,并帮助一次性构建它们。

我有单独的名为v-ps.jar的jar文件。我应该在哪里准确地(在哪个结构中)将它放在Maven本地回购中,以便它能够找到它?

如果你有这个项目的源代码,那么你应该把它作为“v-parent”项目的pom的一部分,就像我上面提到的那样,当你创建父项时,写入您当地的.m2回购。或者,如果您有“v-ps”项目的源代码,则可以使用“mvn clean install”直接构建它,并将该jar写入回购。