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

7bsow1i6  于 2023-11-16  发布在  Spring
关注(0)|答案(8)|浏览(193)

我在这里有一个Sping Boot 项目:https://github.com/jcasbin/jcasbin-springboot-plugin。我遇到了the following error in 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.

字符串
似乎mvnw命令失败了。这个文件是由我的IDE生成的:IntelliJ IDEA 2018.1。我不知道它是用来做什么的,为什么会失败?
我已经在Sping Boot 的github issues here中触发了一个issue,但是Spring project说是Maven wrapper的issue,把我指到了这里。我不太明白是什么意思。是Maven bug吗?那怎么修复错误?

aiazj4mn

aiazj4mn1#

Phil的回答是正确的。下面是如何创建.mvn目录,其中包含所需的jar。
我在这里找到了答案(https://www.baeldung.com/maven-wrapper
如果你有maven,你想让maven wrapper工作,你需要设置maven wrapper:

mvn -N io.takari:maven:wrapper

字符串
它应该创建.mvn目录并将所需的jar文件放入其中。

hgtggwj0

hgtggwj02#

你的git仓库中缺少.mvn文件夹。你应该有一个名为.mvn的文件夹,其中包含wrapper/maven-wrapper.jarwrapper/maven-wrapper.propertiesjvm.config文件。也许你错过了它,因为它是一个隐藏文件夹。
尝试从命令行执行git add -f .mvn,然后提交并推送。

zf2sa74q

zf2sa74q3#

我不知道它是用来:

mvnw是一个maven的 Package 器,基本上它是一个脚本,它将maven从你的本地安装中分离出来,并可能会在实际的mvn命令中添加检查和功能-完整的解释请查看official maven documentation
要设置它(假设您只使用mvn运行它),运行以下命令就足够了:

mvn wrapper:wrapper

字符串
这至少会创建以下新文件:

.
    ├── .mvn
    │   └── wrapper
    │       ├── maven-wrapper.jar
    │       └── maven-wrapper.properties
    ├── mvnw
    └── mvnw.cmd


然后,通过调用mvnw,您可以通过maven-wrapper.jar运行所有内容--完全独立于本地maven安装。
如果在执行命令后maven-wrapper.jar没有就位,则可能是网络问题-最常见的问题是需要配置代理。

如何修复:

有什么问题吗?

代理问题:

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

.
├── .mvn
│   └── wrapper
│       └── maven-wrapper.properties
├── mvnw
└── mvnw.cmd


如果您深入到兔子洞中并检查实际的wrapper code,您会注意到没有默认代理-但是您可以通过创建一个.mvn/jvm.config文件来为java虚拟机设置一个代理,该文件包含:

-Dhttp.proxyHost=proxy.domain.name
    -Dhttp.proxyPort=8080
    -Dhttps.proxyHost=proxy.domain.name
    -Dhttps.proxyPort=8080


完成后,只需重新运行setup命令即可

mvn wrapper:wrapper


自己获取一切:

.
    ├─ .mvn
    │  ├── jvm.config
    │  └── wrapper
    │      ├── maven-wrapper.jar
    │      └── maven-wrapper.properties
    ├── mvnw
    └── mvnw.cmd


到现在为止,运行./mvnw clean install,应该工作正常-它对我来说确实如此(但只有几天)

类问题:

一个美好的一天,我来到办公室,mvnw正在返回与你所说的相同的错误!
对我来说,这个问题实际上是<->jvm.config文件中的行尾(lfcrlf)问题。
mvnw脚本将选项扩展到actual command时,命令会被一个CR在类路径选项之前拆分,因为该类路径是maven-wrapper.jar(包含MaveWrapperMain)传递的位置,所以java命令实际上无法获取类。

我是如何修复的:

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

奖金:

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

git config --global core.autocrlf true


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

gwo2fgha

gwo2fgha4#

1.再加上奥莱克西·沃伦斯基,
使用官方的maven Package 器
mvn Package 器: Package 器
而不是io.takari:maven:wrapper,不再维护
1.正如Phil Webb所提到的,将.mvn文件夹添加到git存储库中

wixjitnu

wixjitnu5#

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

dfddblmv

dfddblmv6#

在我的例子中,我将项目保存在一个文件夹中,该文件夹中的路由包含一个带重音的字符(在我的例子中是“á”)。删除重音解决了这个问题。

ddhy6vgd

ddhy6vgd7#

在我的例子中,有一个.dockerignore文件,您在其中选择了所有应该考虑的jar文件,而.mvn中的文件不在其中,因此出现了错误

6ovsh4lw

6ovsh4lw8#

我实际上只是做了mvn clean install,它工作了,我实际上使用的是spring 2.0的旧版本。

相关问题