Maven separates plugins from "normal" dependencies of a project. A plugin is "only" used to execute the build-process itself, i.e. your product has no direct dependencies to plugins.All artifacts that are used by plugins are resolved from the plugin-repository. That is, if one of your plugins uses JUnit, junit.jar will be loaded from the plugin-repository. The same is true, of course, for the plugin-jars themselves.

All direct dependencies of your product (libraries, frameworks, whatever) are resolved from the "normal" repository. Personally, I think this separation is a a good idea. However, it only pays off, if you don´t use the default remote repositories, but only internal repositories. IMO this is the only way to guarantee reproducible builds, so that´s my default setup. If you use separate internal repositories for plugins and dependencies, you´ve a better chance to control your build environment. All updates of artifacts in the "normal" repository have a direct impact on your product and probably must be controlled by some form of change process. Updates in your internal plugin repository may have an impact on your build process, so you need to verify that Maven still runs as expected. If you use just one repository, it´s difficult handle both scenarios separately.

Sadly, there are some exceptions to the rule. For example, all <extensions> defined in your POM will be loaded from the "normal", not the plugin-repository. It´s not a big issue, but somehow disturbing.

If you decide to use internal repositories, you have to fill them somehow with the required artifacts. The easiest solution is to simply copy your local repository. However, this will not work out-of-the-box for plugins. Maven maintains in remote repositories some extra metadata for plugins in files named maven-metadata.xml. In your local repository, these files are named differently. For example, if you downloaded the plugins from the default plugin-repository (http://repo1.maven.org/maven2), your local metadata files will be named maven-metadata-central.xml (central is the id of the default repository). So, after copying your local repository in the directory of your internal repository, you have to rename all files with the name maven-metadata-central.xml to maven-metadata.xml. The following Ant-script will exactly do this for you:

<project name="prepare-repo" basedir="D:\mvn_repos\plugin" default="run">
 <target name="run">
   <move todir="${basedir}" verbose="true">
     <fileset dir="${basedir}">
       <include name="**/maven-metadata-central.*"/>
     </fileset>
<regexpmapper from="(.*)maven-metadata-central.(.*)" to="\1maven-metadata.\2"/> </move> </target>
</project>

Before running the script, you have to change the directory d:\mvn_repos\plugins to the path of your internal plugin repository, of course.

CU,

Gunther

What's the difference between <repository> (like I had defined) and pluginrepository?
-----Original Message-----
From: Rollo, Dan [mailto:[EMAIL PROTECTED] Sent: Tuesday, April 11, 2006 12:43 PM
To: EJ Ciramella; Maven Users List
Subject: RE: Internal (intranet) repositories

 Have you tried adding "plugin repos" to your pom?

Like:

    <pluginRepositories>
        <pluginRepository>
                        <id>central</id>
                        <name>local-repository</name>
                        <layout>default</layout>
<url>http://build.corp.upromise.com/mavenrepository</url> </pluginRepository>
...
    </pluginRepositories>


Dan

-----Original Message-----
From: EJ Ciramella [mailto:[EMAIL PROTECTED] Sent: Tuesday, April 11, 2006 10:42 AM
To: Maven Users List
Subject: RE: Internal (intranet) repositories

Still - I have:

        
        <repositories>
                <repository>
                        <id>central</id>
                        <name>local-repository</name>
                        <layout>default</layout>
                        
<url>http://build.corp.upromise.com/mavenrepository</url>
                </repository>
                <repository>
                        <id>lty-local</id>
                        <name>local-repository</name>
                        <url>file:thirdparty/repository</url>
                </repository>
        </repositories>
        

(I tried the reversing the order to no avail)

And I see -
E:\work\foxboro\model>mvn process-resources -P foxboro,model-base [INFO] 
Scanning for projects...
[INFO] 
----------------------------------------------------------------------------
[INFO] Building LtyModel
[INFO]    task-segment: [process-resources]
[INFO] 
----------------------------------------------------------------------------
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugin-parent/2.0/maven-plugin-parent-2.0.pom
But I can see this:

http://build.corp.upromise.com/mavenrepository/org/apache/maven/plugins/maven-plugin-parent/2.0/maven-plugin-parent-2.0.pom


What am I doing wrong?

-----Original Message-----
From: Gunther Popp [mailto:[EMAIL PROTECTED]
Sent: Saturday, April 08, 2006 7:29 AM
To: Maven Users List
Subject: Re: Internal (intranet) repositories

I´m by far any expert in the Maven source code, but as far as I understand the implementation the 
repos defined in your pom will be checked first. If your pom contains no repo with the id 
"central", the default repos defined in the "Super-POM" pom-4.0.0.xml will be 
searched next. Then all repos defined in parent-poms are considered.

Additionally, the repos are searched in the order you define them in your 
pom.xml.

This should be true for resolving dependencies. I´m not sure, if parent-poms 
and poms in general are resolved the same way. So maybe this explains the 
problems described in the other mails.

Gunther


I think there's a basic misunderstanding here... As far as I know it, Maven *always* checks Central first. Even if you define another repo somewhere else.

One way people prevent this is by setting up Maven proxy and then setting that proxy as a mirror of Central in their settings.xml file. Then instead of Central, it checks your proxy for the files, and if your proxy doesn't have it, it goes out to Central on its own and retrieves them, and then provides them to your Maven process.

Wayne

On 4/7/06, EJ Ciramella <[EMAIL PROTECTED]> wrote:
Yeah, something else is wrong then, I have apache running on another machine and I have this:

       <repositories>
               <repository>
                       <id>lty-local</id>
                       <name>local-repository</name>

<url>http://build.corp.upromise.com/mavenrepository/</url>
               </repository>
       </repositories>

And I STILL see it pulling from:

Downloading:
http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-javadoc-
plu gin/2.0-beta-3/maven-javadoc-plugin-2.0-beta-3.pom
1K downloaded

I'm able to view this directory from firefox on a different machine (and I tried with out that trailing / and no luck).

How does this work folks? Nothing seems to work like the documentation says it does (sorry, but this is getting really frustrating).


-----Original Message-----
From: dan tran [mailto:[EMAIL PROTECTED]
Sent: Friday, April 07, 2006 1:55 PM
To: Maven Users List
Subject: Re: Internal (intranet) repositories

sounds like a bug to me, since I also try to reproduce it and mvn -X does not give any indication that it references the configured repo before falling back to to the default ones

Perhaps, you can create a small test case and submit a jira.

-Dan



On 4/7/06, EJ Ciramella <[EMAIL PROTECTED]> wrote:
Yup - and I like the idea, but haven't gotten that far yet.

I'm still disappointed that the file:/// syntax doesn't work.

I _just_ finished installing apache 2 and will try with http:// syntax now.

When I'm satisfied with these developments, I'll move on to trying out the proxy part of this.



-----Original Message-----
From: Rollo, Dan [mailto:[EMAIL PROTECTED]
Sent: Friday, April 07, 2006 1:29 PM
To: EJ Ciramella; Maven Users List
Subject: RE: Internal (intranet) repositories

Sorry if this have already been suggested and rejected, but: Have you considered using the maven-proxy to cache the ibiblio repo stuff on an internal machine?

Dan

-----Original Message-----
From: EJ Ciramella [mailto:[EMAIL PROTECTED]
Sent: Friday, April 07, 2006 10:32 AM
To: Maven Users List
Subject: RE: Internal (intranet) repositories

Bummer about the potential for a bug.  I know that the group working
on
maven 2 things have submitted a "repository" directory in the perforce project (kinda exactly the opposite to what this feature in maven is supposed to provide).

But theirs works, but it seems to have to be a local copy.

I'll try to bring up apache on that machine and see what happens. I kind of don't want to do this to an already complicated build environment though.

-----Original Message-----
From: Wayne Fay [mailto:[EMAIL PROTECTED]
Sent: Friday, April 07, 2006 12:33 AM
To: Maven Users List
Subject: Re: Internal (intranet) repositories

Can you perhaps load that repository on a local Apache server and
modify
the <repository> to reflect the HTTP repo, and see if it still fails
to
attempt to access the local repo?

Might be a bug in how Maven deals with file:/// repos. I know most of
us
on the list are using simple HTTP repos, so you might have just
stumbled
into a new bug.

Wayne


On 4/6/06, EJ Ciramella <[EMAIL PROTECTED]> wrote:
Here is my pom file.  The directory in the url below is a shared
folder
on a different machine.

<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/maven-v4_0_0.xsd";>
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.ejstools.tool1</groupId>
 <artifactId>tool1</artifactId>
 <packaging>jar</packaging>
 <version>1.0-SNAPSHOT</version>
 <name>EJs Tools</name>
 <url>http://build2.corp.upromise.com:8080</url>
<description>This project is simply here to lean about maven and eventually will be used to build EJs Java tools.</description>
  <repositories>
    <repository>
     <id>local</id>
     <name>Upromise Maven Repository</name>
     <url>file:///<servernamehere>/mavenrepository</url>
    </repository>
  </repositories>
 <dependencies>
   <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>3.8.1</version>
     <scope>test</scope>
   </dependency>
 </dependencies>
   <build>
   <resources>
     <resource>
       <directory>src/main/resources</directory>
       <filtering>true</filtering>
     </resource>
   </resources>
 </build>
</project>

-----Original Message-----
From: Wayne Fay [mailto:[EMAIL PROTECTED]
Sent: Thursday, April 06, 2006 6:12 PM
To: Maven Users List
Subject: Re: Internal (intranet) repositories

Where exactly were you putting that repository section? In your pom.xml? Or in another configuration file?

Wayne


On 4/6/06, EJ Ciramella <[EMAIL PROTECTED]> wrote:
None of this explains why it didn't use my repo and simply ignored
it
completely.
This is the more important part of the puzzle.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


--------------------------------------------------
This e-mail and any files transmitted with it may contain privileged
or
confidential information.
It is solely for use by the individual for whom it is intended, even
if
addressed incorrectly.
If you received this e-mail in error, please notify the sender; do not disclose, copy, distribute, or take any action in reliance on the contents of this information;
and
delete it from
your system. Any other use of this e-mail is prohibited.

Thank you for your compliance.
--------------------------------------------------

--------------------------------------------------------------------
- To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

--------------------------------------------------
This e-mail and any files transmitted with it may contain privileged or 
confidential information.
It is solely for use by the individual for whom it is intended, even if 
addressed incorrectly.
If you received this e-mail in error, please notify the sender; do not 
disclose, copy, distribute,
or take any action in reliance on the contents of this information; and delete 
it from
your system. Any other use of this e-mail is prohibited.

Thank you for your compliance.
--------------------------------------------------

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to