Ragini
Ragini

Reputation: 1529

How Maven looks for dependencies

I have read many documentation and tutorial about getting started with Maven. But few things are still not clear to me :

1) When pom.xml contains <dependency>, Maven will put that artifact/JAr in Maven local Repository. Right ?

2) Suppose, I have sub modules in my MAven project. Then what is the correct way to build the project ? one should start from parent module and then go to further sub modules. right ? and that way maven will create dependency jars and put them in local Maven Repo folder ?

3) For example, if my sub module pom.xml contains following dependency. How should I provide it (vd-ps.jar) to Maven so that Maven finds it when I do Maven clean install on Submodule/pom.xml? I mean to say what does Maven require or from where does it generate such user defined vd-ps.jar ? from compiled class files ?

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

Ok, let me ask directly what I want to achieve: I have following pom.xml. and from it I would like to create a separate maven project (Say PTest) that uses dependencies (jars) of another big multi module maven project. Here :- I have a module named v-parent in my multi module project which has pom.xml in its trunk folder.

<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) Now where should I put this sub module v-parent in my newly created Maven project (PTest) in eclipse ?

I mean how do I exactly make my PTest/pom.xml find this parent jar v-parent.jar ?

I have separate jar file named v-ps.jar. where should I put it exactly (in which structure) in Maven local repo so that it can find it ?

Upvotes: 1

Views: 4301

Answers (2)

ranjithkr
ranjithkr

Reputation: 604

1) Now where should I put this sub module v-parent in my newly created Maven project (PTest) in eclipse ? I mean how do I exactly make my PTest/pom.xml find this parent jar v-parent.jar ?

So in this case "v-parent" will be another project in Eclipse of packaging type "pom". And if you want to build the child project "p_test" and its dependency "v-ps", you could list them as modules in the "v-parent" project's pom file like below:

<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>

Now when you run "mvn clean install" on "v-parent" it should build "p_test" and "v-ps" projects and places a copy of their jar files in your local .m2/repository, assuming those projects don't error our during the build. So the parent project acts like an aggregate for the sub-projects and helps building them all at one shot.

I have separate jar file named v-ps.jar. where should I put it exactly (in which structure) in Maven local repo so that it can find it ?

If you have the source for this project, then you should include it as part of the "v-parent" project's pom as a module like I mentioned above, and when you build the parent, on success, the jar gets written to your local .m2 repo. Or if you have the source for "v-ps" project, you could directly build that using "mvn clean install" and the jar will be written to the repo.

Upvotes: 0

Essex Boy
Essex Boy

Reputation: 7988

Each time you run

mvn clean install

Your project will be built and the resulting artifact will be 'installed' in your local repository (usually ~/.m2/repository). So if you build the project which makes the jar com.b.t:vd-ps:1.1.0 this will then be available in your local repository for other projects to use as a dependency.

If you dependency is in another module under the same parent it can in included like so :

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

If you run a

mvn clean deploy

Your artifact will be built and deployed to the remote repository (Nexus or Artifactory or similar), provided you have the correct config in your pom.xml

See https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

Upvotes: 1

Related Questions