Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Should I write repositories in my pom.xml?

I am new to Maven. If I start new project with Maven, should I know any repository URLs for it to work?

For example, this Hibernate tutorial http://docs.jboss.org/hibernate/core/3.3/reference/en/html/tutorial.html says about how to create a sample project with pom.xml text. But this pom.xml does not contain any repositories.

So, my m2eclipse plugin says, for example Project build error: 'dependencies.dependency.version' for org.hibernate:hibernate-core:jar is missing., for all dependency tag in pom.xml

Is this because of repositories absence?

Where to know repositories URLs? Is there one big repository? Why doesn't it included by default?

UPDATE 1 It is said here, that Maven should use "central" repository by default: http://maven.apache.org/guides/introduction/introduction-to-repositories.html

I have searched there for hibernate-code artifact and found it. So, this artifact IS in central repository. By my maven says dependency not found. Hence it doesn't use it's central repository. Why?

like image 445
Dims Avatar asked Jan 19 '12 19:01

Dims


People also ask

What should be written in POM xml?

The pom. xml file contains information of project and configuration information for the maven to build the project such as dependencies, build directory, source directory, test source directory, plugin, goals etc.

What is the use of repositories tag in POM xml?

A repository in Maven holds build artifacts and dependencies of varying types. There are exactly two types of repositories: local and remote: the local repository is a directory on the computer where Maven runs. It caches remote downloads and contains temporary build artifacts that you have not yet released.

What is repositories in POM file?

A maven repository is a directory of packaged JAR file with pom. xml file. Maven searches for dependencies in the repositories. There are 3 types of maven repository: Local Repository.


2 Answers

Apparently your Hibernate dependency is missing <version> tag:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>3.6.9.Final</version> <!-- this line is missing -->
</dependency>

Note that you don't have to specify version of dependencies previously declared in <dependencyManagement>.

Old answer:

Every build script (not only with Maven) should be reproducible and independent from environment. Standard pom.xml (called super pom), which every pom.xml inherits from, already defines main Maven central repository:

<repositories>
  <repository>
    <id>central</id>
    <name>Maven Repository Switchboard</name>
    <layout>default</layout>
    <url>https://repo1.maven.org/maven2</url>
    <snapshots>
      <enabled>false</enabled>
    </snapshots>
  </repository>
</repositories>

You don't have to define this repository, and you don't have to define any others if all your dependencies are there. On the other hand if you are using some external repositories, you must add them to pom.xml, so that every developer is always able to build.

The bottom line is: if you can build the project having a completely empty repository, your pom.xml is fine.

like image 95
Tomasz Nurkiewicz Avatar answered Oct 04 '22 18:10

Tomasz Nurkiewicz


It's not advisable to define repositories in POM files as that causes a lot of issues (Maven will search those repositories for ANY artifact even the ones available at Central, poor portability, ...)

Best approach: Setup a repository manager (Artifactory, Nexus) and edit your settings.xml file to use the repo manager as a mirror.

Second best approach: Define the required repositories in your settings.xml file, not in your pom.xml files.

Repositories in poms is a bad idea.

like image 23
Agustí Sánchez Avatar answered Oct 04 '22 18:10

Agustí Sánchez