50

背景

尝试使用全新安装的 Apache Maven 3.1.0 和 Java 1.7 将 Java 库添加到本地 Maven 存储库。以下是添加 Java 归档文件的方式:

mvn install:install-file \
  -DgroupId=net.sourceforge.ant4x \
  -DartifactId=ant4x \
  -Dversion=0.3.0 \
  -Dfile=ant4x-0.3.0.jar \
  -Dpackaging=jar

这创建了以下目录结构:

$HOME/.m2/repository/net/sourceforge/ant4x/
├── 0.3.0
│   ├── ant4x-0.3.0.jar.lastUpdated
│   └── ant4x-0.3.0.pom.lastUpdated
└── ant4x
    ├── 0.3.0
    │   ├── ant4x-0.3.0.jar
    │   ├── ant4x-0.3.0.pom
    │   └── _remote.repositories
    └── maven-metadata-local.xml

该项目的pom.xml文件引用了依赖项目(上面的树),如下所示:

<properties>
  <java-version>1.5</java-version>
  <net.sourceforge.ant4x-version>0.3.0</net.sourceforge.ant4x-version>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
...
<dependency>
  <groupId>net.sourceforge</groupId>
  <artifactId>ant4x</artifactId>
  <version>${net.sourceforge.ant4x-version}</version>
  <scope>provided</scope>
</dependency>

问题

运行后mvn compile,返回以下错误(Pastebin 上的完整日志):

[ERROR] Failed to execute goal on project ant4docbook: Could not resolve dependencies for project net.sourceforge:ant4docbook:jar:0.6-SNAPSHOT: Failure to find net.sourceforge:ant4x:jar:0.3.0 in http://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced -> [Help 1]

文档指出了许多可能存在的问题,但这些问题似乎都不适用。

想法

根据文档,我尝试了以下操作:

  1. 将默认设置复制到 Maven 的用户主目录:
    cp /opt/apache-maven-3.1.0/conf/settings.xml $HOME/.m2/。
  2. 编辑用户的 settings.xml 文件。
  3. 更新本地存储库的值:
    ${user.home}/.m2/repository
  4. 保存文件。

我还尝试了以下命令:

mvn -U
mvn clear -U

我尝试使用 Maven 3.0.5,但也失败了。

问题

您如何强制 Maven 使用该库的本地版本,而不是试图寻找一个尚未可供下载的库?

有关的

未解决问题的相关问题和信息:

4

2 回答 2

18

改变:

<!-- ANT4X -->
<dependency>
  <groupId>net.sourceforge</groupId>
  <artifactId>ant4x</artifactId>
  <version>${net.sourceforge.ant4x-version}</version>
  <scope>provided</scope>
</dependency>

至:

<!-- ANT4X -->
<dependency>
  <groupId>net.sourceforge.ant4x</groupId>
  <artifactId>ant4x</artifactId>
  <version>${net.sourceforge.ant4x-version}</version>
  <scope>provided</scope>
</dependency>

groupIdofnet.sourceforge不正确。正确的值为net.sourceforge.ant4x

于 2013-09-11T03:36:36.980 回答
3

范围<scope>provided</scope>让您有机会告诉您该 jar 将在运行时可用,因此不要捆绑它。这并不意味着您在编译时不需要它,因此 maven 会尝试下载它。

现在我认为,下面的 Maven 工件根本不存在。我尝试搜索谷歌,但无法找到。因此,您遇到了这个问题。

更改groupId<groupId>net.sourceforge.ant4x</groupId>获取最新的 jar。

<dependency>
  <groupId>net.sourceforge.ant4x</groupId>
  <artifactId>ant4x</artifactId>
  <version>${net.sourceforge.ant4x-version}</version>
  <scope>provided</scope>
</dependency>

这个问题的另一个解决方案是:

  1. 运行你自己的 Maven 仓库。
  2. 下载罐子
  3. 将 jar 安装到存储库中。
  4. 在您的 pom.xml 中添加代码,例如:

其中http://localhost/repo是您的本地 repo URL:

<repositories>
    <repository>
        <id>wmc-central</id>
        <url>http://localhost/repo</url>
    </repository>
    <-- Other repository config ... -->
</repositories>
于 2013-09-11T03:37:37.643 回答