138

以下是尝试使用 maven 构建 Web 应用程序时,当我的 Internet 连接不稳定时,我通常会遇到的错误。

我的问题是,为什么每次之前构建相同的应用程序时,maven 总是必须下载。

我的配置可能有什么问题使 maven 每次都下载?

以下是我尝试离线构建时遇到的错误:

[INFO] ------------------------------------------------------------------------
[INFO] Building mywebapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://raw.github.com/pagecrumb/mungo/mvn-repo/com/pagecrumb/mungo/0.0.1-SNAPSHOT/maven-metadata.xml

[WARNING] Could not transfer metadata com.mywebapp:mungo:0.0.1-SNAPSHOT/maven-metadata.xml 
from/to mungo-mvn-repo (https://raw.github.com/pagecrumb/mungo/mvn-repo/): raw.github.com
[INFO] 
[INFO] --- maven-war-plugin:2.1.1:war (default-cli) @ mywebapp ---
[INFO] Packaging webapp
[INFO] Assembling webapp [mywebapp] in [D:\workspace\web\target\mywebapp-1.0-SNAPSHOT]
[INFO] Processing war project
[INFO] Copying webapp resources [D:\workspace\web\src\main\webapp]
[INFO] Webapp assembled in [1237 msecs]
[INFO] Building war: D:\workspace\web\target\mywebapp-1.0-SNAPSHOT.war
[WARNING] Warning: selected war files include a WEB-INF/web.xml which will be ignored 
(webxml attribute is missing from war task, 
or ignoreWebxml attribute is specified as 'true')
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building com.mywebapp [com.mywebapp] 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.1/maven-release-plugin-2.1.pom

[WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-release-plugin:2.1: Plugin org.apache.maven.plugins:maven-release-plugin:2.1 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-release-plugin:jar:2.1
Downloading: http://download.java.net/maven/2/org/apache/maven/plugins/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/codehaus/mojo/maven-metadata.xml

397/397 B   

Downloaded: http://download.java.net/maven/2/org/codehaus/mojo/maven-metadata.xml (397 B at 0.0 KB/sec)
[WARNING] Failure to transfer org.apache.maven.plugins:maven-war-plugin/maven-metadata.xml from http://download.java.net/maven/2 was cached in the local repository, resolution will not be reattempted until the update interval of maven2-repository.dev.java.net has elapsed or updates are forced. Original error: Could not transfer metadata org.apache.maven.plugins:maven-war-plugin/maven-metadata.xml from/to maven2-repository.dev.java.net (http://download.java.net/maven/2): download.java.net
[INFO] 
[INFO] --- maven-war-plugin:2.3:war (default-cli) @ mywebapp-build ---
[INFO] Packaging webapp
[INFO] Assembling webapp [mywebapp-build] in [D:\workspace\target\mywebapp-build-0.0.1-SNAPSHOT]
[INFO] Processing war project
[INFO] Webapp assembled in [15 msecs]
[INFO] Building war: D:\workspace\target\mywebapp-build-0.0.1-SNAPSHOT.war
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] mywebapp ..................................... SUCCESS [27.999s]
[INFO] com.mywebapp [com.mywebapp] ..................... FAILURE [1:00.406s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:41.409s
[INFO] Finished at: Tue May 07 22:13:38 SGT 2013
[INFO] Final Memory: 11M/28M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.3:war 
(default-cli) on project mywebapp-build: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)
4

6 回答 6

148

在您的settings.xml(或者,可能是您的项目的父或公司父 POM)中查找该<repositories>元素。它看起来像下面这样。

<repositories>
    <repository>
        <id>central</id>
        <url>http://gotoNexus</url>
        <snapshots>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
        </snapshots>
        <releases>
            <enabled>true</enabled>
            <updatePolicy>daily</updatePolicy>
        </releases>
    </repository>
</repositories>

注意<updatePolicy>元素。该示例告诉 Maven 联系远程仓库(在我的情况下为 Nexus,如果您不使用自己的远程仓库,则为 Maven Central),只要 Maven 需要在构建期间检索快照工件,检查是否有更新的副本。为此需要元数据。如果有更新的副本,Maven 会将其下载到您的本地存储库。

在示例中,对于发布,政策是daily这样的,它将在您当天的第一次构建期间进行检查。 never也是一个有效的选项,如Maven 设置文档中所述。

插件单独解析。您可能也为这些配置了存储库,如果需要,可以使用不同的更新策略。

<pluginRepositories>
    <pluginRepository>
        <id>central</id>
        <url>http://gotoNexus</url>
        <snapshots>
            <enabled>true</enabled>
            <updatePolicy>daily</updatePolicy>
        </snapshots>
        <releases>
            <enabled>true</enabled>
            <updatePolicy>never</updatePolicy>
        </releases>
    </pluginRepository>
</pluginRepositories>

其他人提到了这个-o选项。如果你使用它,Maven 会在“离线”模式下运行。它知道它只有一个本地存储库,并且无论您使用什么更新策略,它都不会联系远程存储库来刷新工件。

于 2013-05-07T17:26:20.783 回答
37

可能使用标志-o,--offline "Work offline"来防止这种情况。

像这样:

maven compile -o

于 2015-08-05T07:08:48.943 回答
13

我想是因为您没有指定插件版本,所以它会触发相关元数据的下载以获取最后一个。

否则,您是否尝试使用 -o 强制使用本地存储库?

于 2013-05-07T14:38:22.263 回答
0

我还没有研究过,当 Maven 进行哪些查找时,但为了获得稳定和可重复的构建,我强烈建议不要直接访问 Maven 存储库,而是使用 Maven 存储库管理器,例如 Nexus。

以下是如何设置设置文件的教程:

http://books.sonatype.com/nexus-book/reference/maven-sect-single-group.html

http://maven.apache.org/repository-management.html

于 2013-05-07T14:27:10.457 回答
0

Maven 这样做是因为您的依赖项位于 SNAPSHOT 版本中,并且 maven 无法检测到存储库中对该快照版本所做的任何更改。释放您的工件并将 pom.xml 中的版本更改为该版本,maven 将不再获取元数据文件。

于 2019-11-25T11:20:04.043 回答
0

就我而言,我使用私有存储库管理器。虽然不推荐使用其他一些 Maven 存储库管理器。看起来 gradle 从已弃用的存储库管理器中查找我的私有工件。更新或删除不推荐使用的存储库管理器为我解决了这个问题。

于 2021-08-05T06:28:02.763 回答