无法找到或加载主类org.apache.maven.wrapper.MavenWrapperMain

Yan*_*Luo 19 java spring maven travis-ci spring-boot

我在这里有一个spring boot项目:https://github.com/jcasbin/jcasbin-springboot-plugin.我在Travis CI中遇到以下错误:

shell
3.43s$ ./mvnw install -DskipTests=true -Dmaven.javadoc.skip=true -B -V
/home/travis/build/jcasbin/jcasbin-springboot-plugin
Picked up _JAVA_OPTIONS: -Xmx2048m -Xms512m
Error: Could not find or load main class org.apache.maven.wrapper.MavenWrapperMain
The command "eval ./mvnw install -DskipTests=true -Dmaven.javadoc.skip=true -B -V " failed. Retrying, 2 of 3.
Run Code Online (Sandbox Code Playgroud)

似乎mvnw命令失败了.该文件由我的IDE生成:IntelliJ IDEA 2018.1.我不知道它的用途是什么,为什么会失败?

我已经在春天启动的GitHub的问题解雇的问题在这里,但Spring项目说这是Maven的包装的问题,在这里我指出.我不太明白这意味着什么.它是Maven的bug吗?那么如何修复错误呢?

Phi*_*ebb 32

您错过了.mvngit存储库中的文件夹.你应该有一个.mvn包含文件的文件夹wrapper/maven-wrapper.jar,wrapper/maven-wrapper.propertiesjvm.config.也许你错过了它,因为它是一个隐藏的文件夹.

尝试git add -f .mvn从命令行执行然后提交并推送.


小智 23

菲尔的回答是正确的.以下是如何使用所需的jar创建.mvn目录.
我在这里找到了答案(https://www.baeldung.com/maven-wrapper)

如果你有maven而你想让maven包装器工作,你需要设置maven包装器:

mvn -N io.takari:maven:wrapper
Run Code Online (Sandbox Code Playgroud)

它应该创建.mvn目录并将所需的jar放入其中.

  • 尽管@PhilWebb的答案可能是正确的,但它解决了诊断问题,但没有解决问题。这很有帮助,尽管`takari`是什么,是否有标准的lib / package? (2认同)

小智 13

\xc2\xab我不知道它是做什么用的\xc2\xbb:

\n

mvnw 是 Maven 包装器。基本上,它是一个将 Maven 与本地安装分离的脚本,并且可以向实际的 mvn 命令添加检查和功能 - 有关完整的说明,请查看官方Maven 文档

\n

要设置它(假设您仅使用它运行mvn),运行以下命令就足够了:

\n
    mvn wrapper:wrapper \n
Run Code Online (Sandbox Code Playgroud)\n

这应该至少创建以下新文件:

\n
    .\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .mvn\n    \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 wrapper\n    \xe2\x94\x82       \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 maven-wrapper.jar\n    \xe2\x94\x82       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 maven-wrapper.properties\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 mvnw\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 mvnw.cmd\n
Run Code Online (Sandbox Code Playgroud)\n

然后,通过调用mvnwmaven-wrapper.jar 来运行所有内容 - 完全独立于本地 maven 安装。

\n

如果maven-wrapper.jar命令后未到位,则可能存在网络问题 - 最常见的问题是需要配置代理。

\n

\xc2\xab如何修复\xc2\xbb:

\n

问题是什么?

\n

代理问题:

\n

最初,他们mvn wrapper:wrapper无法maven-wrapper.jar为我获取。

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .mvn\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 wrapper\n\xe2\x94\x82       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 maven-wrapper.properties\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 mvnw\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 mvnw.cmd\n
Run Code Online (Sandbox Code Playgroud)\n

如果您深入研究兔子洞并检查实际的包装器代码,您会注意到没有默认代理 - 但您可以通过创建.mvn/jvm.config包含以下内容的文件来为 java 虚拟机设置代理:

\n
    -Dhttp.proxyHost=proxy.domain.name\n    -Dhttp.proxyPort=8080\n    -Dhttps.proxyHost=proxy.domain.name\n    -Dhttps.proxyPort=8080 \n
Run Code Online (Sandbox Code Playgroud)\n

完成后只需重新运行安装命令

\n
    mvn wrapper:wrapper\n
Run Code Online (Sandbox Code Playgroud)\n

自己获取了所有内容:

\n
    .\n    \xe2\x94\x9c\xe2\x94\x80 .mvn\n    \xe2\x94\x82  \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 jvm.config\n    \xe2\x94\x82  \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 wrapper\n    \xe2\x94\x82      \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 maven-wrapper.jar\n    \xe2\x94\x82      \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 maven-wrapper.properties\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 mvnw\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 mvnw.cmd\n
Run Code Online (Sandbox Code Playgroud)\n

到目前为止,运行./mvnw clean install, 应该可以正常工作 - 它对我有用(但只持续了几天)

\n

班级问题:

\n

一个美好的一天,我进入办公室,并mvnw返回了您所说的相同错误!...

\n

对我来说,问题实际上是jvm.config文件中的行结尾 (LF <-> CRLF) 问题。

\n

mvnw脚本将选项扩展为实际命令时,该命令会因 CR 在类路径选项之前将其分割而变得混乱。由于该类路径是传递 maven-wrapper.jar(包含 MaveWrapperMain)的位置,因此 java 命令实际上无法获取该类。

\n

我是如何解决的:

\n

我只是重新创建了仅包含 LF 而没有 CRLF 的文件。

\n

奖金:

\n

当我注意到这个 CRLF 是由 Windows 计算机上的用户引入时,我检查了一些git 文档以避免重复该问题,运行以下命令并建议每个人都这样做:

\n
    git config --global core.autocrlf true\n
Run Code Online (Sandbox Code Playgroud)\n
\n

希望这可以集中我发现分散的步骤,并最终为某人节省时间。

\n


小智 8

  1. 添加到 Oleksii Volynskyi 中,

使用官方的maven包装器

mvn 包装器:包装器

而不是不再维护的 io.takari:maven:wrapper

  1. 正如 Phil Webb 所提到的,将 .mvn 文件夹添加到 git 存储库


小智 5

对于使用 Windows 看到此错误的任何人,请检查.mvn文件夹文件是否已转换为 CRLF。如果是这样,将它们更改为 LF 可能会解决您的问题。