是否存在本地远程Maven存储库?

时间:2015-04-01 04:19:03

标签: maven repository pom.xml archiva

我安装了一个构建盒:

  • 的Maven
  • Archiva

我已经将Bamboo配置为从远程Git源获取我的Maven项目,然后使用目标' clean install'来构建它。

我已经为Archiva配置了两个回购:

  1. 镜子 - 中央的镜子
  2. dev - repo for my artifacts
  3. 我对Maven settings.xml进行了以下更改:

    # Define local repo - this is the same location as i have set up for the Archiva 'dev' repo.
    <localRepository>/opt/maven-repo/dev</localRepository>
    
    # Define the Archiva mirror i set up
    <mirror>
      <id>mirror</id>
      <url>http://localhost:8080/repository/mirror/</url>
      <mirrorOf>external:*</mirrorOf>
    </mirror>
    

    当我执行构建时,Maven通过镜像抓取所有外部内容,然后将构建的工件添加到dev,以及从镜像中抓取的其他jar。所以我现在有一些重复的罐子......

    \回购\镜\的junit \ junit的 \回购\镜\ classworlds \ classworlds \回购\ dev的\的JUnit \的JUnit \回购\ dev的\ classworlds \ classworlds \回购\ dev的\我\ myartifact

    我的问题是,这是正确的方法吗?真的,我想保持&#39; dev&#39;只有我的文物和镜子与中心的所有东西 - 我不想要重复。

    我是否应该在settings.xml中使用LocalRepository配置,或者我应该使用&#39; mvn deploy&#39;通过不同的方法将工件放在我的Archiva存储库中?

    有人可以澄清本地和远程存储库的不同用例吗?

    最后,我应该如何定义我的POM?目前,我刚刚定义了

    <distributionManagement>
        <repository>
            <id>dev</id>
            <url>file:///repo/dev</url>
        </repository>
    </distributionManagement>
    

    我应该加入镜子吗?

1 个答案:

答案 0 :(得分:0)

要将工件放入存储库管理器,您应使用maven-deploy-plugin的默认值,该默认值可由distributionManagement控制。通过定义distributionManagement来控制放置这些东西的目标。

<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">
  ...
  <distributionManagement>
    <repository>
      <id>releases</id>
      <name>Release</name>
      <url>http://urlArchiva/releases/</url>
    </repository>
    <snapshotRepository>
      <id>snapshots</id>
      <name>Snapshots</name>
      <url>http://urlArchiva/snapshots/</url>
    </snapshotRepository>
    ...
  </distributionManagement>
  ...
</project>

用于使用工件的存储库在settings.xml中定义

<settings>
  <mirrors>
    <mirror>
      <!--This sends everything else to /public -->
      <id>nexus</id>
      <mirrorOf>*</mirrorOf>
      <url>http://serverUrlArchiva/public/</url>
    </mirror>
  </mirrors>
  <profiles>
    <profile>
      <id>nexus</id>
      <repositories>
        <repository>
          <id>central</id>
          <url>http://central</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </repository>
      </repositories>
     <pluginRepositories>
        <pluginRepository>
          <id>central</id>
          <url>http://central</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
  <activeProfiles>
    <!--make the profile active all the time -->
    <activeProfile>nexus</activeProfile>
  </activeProfiles>
</settings>

在Bamboo上,您应该能够控制哪个settings.xml用于每个构建都有一个本地存储库,这使得构建彼此独立。