Maven - 将远程存储库也用作本地存储库

时间:2014-09-15 14:21:32

标签: java maven svn deployment

我已经搜索了一整天的解决方案,但到目前为止没有任何作用。

问题: 我有两个项目Foo和Commons使用Maven。 Foo依赖于Commons。 Commons通过scp部署到服务器上的远程存储库。同一台服务器也会检查Foo并构建它。但是当服务器尝试构建Foo时,它会尝试远程访问Commons Jar(通过scp)并抛出错误:

  

无法传输元数据groupId:commons:0.0.1-SNAPSHOT / maven-metadata.xml from / to my-repository(scp://server/.m2/repository):无法连接。原因:SSH_MSG_DISCONNECT:2用户

的身份验证失败太多

编辑:将Commons部署到服务器上。当地包装Foo也有效。我在服务器上使用Maven 3.0.5。

到目前为止我尝试了什么:

  • Foo的{​​{1}}
  • 中声明本地存储库
  • pom.xml org.apache.maven.wagon:wagon-file:2.6 Foo
  • 中声明pom.xml为附加信息
  • 将Commons的版本从0.0.1-SNAPSHOT更改为0.0.1-RELEASE

背景 Project Commons被其他项目使用,有几个人在这些项目上工作。这些人不应该查看Project Commons,但应该始终可以访问最新的Commons Jar。

〜/ .m2 /:

中的

settings.xml

  ...
  <servers>
    <server>
      <id>my-repository</id>
      <username>user</username>
      <password>password</password>
    </server>
  </servers>
  ...

Common的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>
  <groupId>groupId</groupId>
  <artifactId>commons</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>commons</name>

  <distributionManagement>
    <repository>
      <id>my-repository</id>
      <url>scp://server/.m2/repository</url>
    </repository>
  </distributionManagement>

  <build>
    ...
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
         <artifactId>wagon-ssh</artifactId>
         <version>2.6</version>
      </extension>
    </extensions>
  </build>

  <dependencies>
    ...
  </dependencies>

</project>

Foo的pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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>
    <groupId>groupId</groupId>
    <artifactId>foo</artifactId>
    <packaging>jar</packaging>
    <version>1.0</version>

    <repositories>
        <repository>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <id>my-repository</id>
            <url>scp://server/.m2/repository</url>
        </repository>
    </repositories>

    ...

</project>

1 个答案:

答案 0 :(得分:1)

为了使其工作,我必须在服务器.m2/settings.xml中为服务器存储库添加镜像。 <mirrorOf>必须与<id>中定义的存储库pom.xml相同。

服务器:〜/ .m2目录/ settings.xml中:

  ...
  <mirrors>
    ...
    <mirror>
      <id>local-mirror</id>
      <mirrorOf>my-repository</mirrorOf>
      <url>file://${user.home}/.m2/repository</url>
    </mirror>
  </mirrors>
  ...

来源:http://maven.apache.org/guides/mini/guide-mirror-settings.html