"我不知道它的用途是什么":
mvnw是一个Maven wrapper。基本上,它是一个脚本,将Maven与您的本地安装分离,并可能为实际的mvn命令添加检查和功能 - 详细解释请查看官方Maven文档。
要设置它(假设您仅使用mvn
运行),只需要运行:
mvn wrapper:wrapper
这将至少创建以下新文件:
.
├── .mvn
│ └── wrapper
│ ├── maven-wrapper.jar
│ └── maven-wrapper.properties
├── mvnw
└── mvnw.cmd
接着,通过调用 mvnw
命令,您可以完全独立于本地 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
有了这个设置,只需重新运行安装命令即可。
mvn wrapper:wrapper
自动获取所有内容:
.
├─ .mvn
│ ├── jvm.config
│ └── wrapper
│ ├── maven-wrapper.jar
│ └── maven-wrapper.properties
├── mvnw
└── mvnw.cmd
现在,运行 ./mvnw clean install
命令应该可以正常工作 - 我成功过(但只坚持了几天)。
类问题:
有一天,我来到办公室,发现 mvnw
返回了您所述的相同错误!...
对我来说,问题实际上是 jvm.config
文件中的换行符(LF <-> CRLF)问题。
由于 mvnw
脚本会将选项扩展为一个实际命令,因此在类路径选项之前被 CR 截断,导致命令混乱。 由于类路径是传递 MaveWrapperMain 的 maven-wrapper.jar 的位置,Java 命令实际上无法获取类。
我如何解决它:
我只是重新创建了只包含 LF 而没有 CRLF 的文件。
Bonus:
由于我注意到这个 CRLF 是由 Windows 机器上的用户引入的,我检查了一些git 文档以避免重复此问题,运行了以下命令,并建议每个人都这样做:
git config --global core.autocrlf true
希望这个总结能够整合我发现的零散步骤,为某些人节省时间。