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
您错过了.mvn
git存储库中的文件夹.你应该有一个.mvn
包含文件的文件夹wrapper/maven-wrapper.jar
,wrapper/maven-wrapper.properties
和jvm.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放入其中.
小智 13
mvnw 是 Maven 包装器。基本上,它是一个将 Maven 与本地安装分离的脚本,并且可以向实际的 mvn 命令添加检查和功能 - 有关完整的说明,请查看官方Maven 文档。
\n要设置它(假设您仅使用它运行mvn
),运行以下命令就足够了:
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然后,通过调用mvnw
maven-wrapper.jar 来运行所有内容 - 完全独立于本地 maven 安装。
如果maven-wrapper.jar
命令后未到位,则可能存在网络问题 - 最常见的问题是需要配置代理。
最初,他们mvn wrapper:wrapper
无法maven-wrapper.jar
为我获取。
.\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 虚拟机设置代理:
-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
, 应该可以正常工作 - 它对我有用(但只持续了几天)
一个美好的一天,我进入办公室,并mvnw
返回了您所说的相同错误!...
对我来说,问题实际上是jvm.config
文件中的行结尾 (LF <-> CRLF) 问题。
当mvnw
脚本将选项扩展为实际命令时,该命令会因 CR 在类路径选项之前将其分割而变得混乱。由于该类路径是传递 maven-wrapper.jar(包含 MaveWrapperMain)的位置,因此 java 命令实际上无法获取该类。
我是如何解决的:
\n我只是重新创建了仅包含 LF 而没有 CRLF 的文件。
\n奖金:
\n当我注意到这个 CRLF 是由 Windows 计算机上的用户引入时,我检查了一些git 文档以避免重复该问题,运行以下命令并建议每个人都这样做:
\n git config --global core.autocrlf true\n
Run Code Online (Sandbox Code Playgroud)\n希望这可以集中我发现分散的步骤,并最终为某人节省时间。
\n小智 8
使用官方的maven包装器
mvn 包装器:包装器
而不是不再维护的 io.takari:maven:wrapper