使用vagrant,我git clone
将我的java应用程序发送到c:/shared
。在我的Vagrantfile
中,我指定我的主机c:/shared
将映射到我的虚拟机上的/home/vagrant/myapp
。
当我从VM中运行mvn clean compile
时,我遇到了这个错误:
core/myapp/target/classes/com/myapp/...
at org.apache.maven.plugin.clean.CleanMojo.execute(CleanMojo.java:215)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:133)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
... 19 more
Caused by: java.io.IOException: Failed to delete core/myapp/target/classes/com/myapp/...
at org.apache.maven.plugin.clean.Cleaner.delete(Cleaner.java:249)
at org.apache.maven.plugin.clean.Cleaner.delete(Cleaner.java:191)
at org.apache.maven.plugin.clean.Cleaner.delete(Cleaner.java:158)
但是,Maven构建在我的Windows(主机)计算机上成功。
运行ls
会产生奇怪的输出,因为权限会显示为问号(?):
[vagrant-centos65 parent]$ ls -lrot target/...
ls: cannot access ...
?????????? ? ? ? ? $Class$$doMethod$1$1$$anonfun$apply$2.class
我以kevin
用户身份运行,/home/vagrant/myapp
拥有vagrant
。但是,myapp
个目录中的大部分(如果不是全部)都具有广泛开放(766
或777
)权限。
过去,我已在guest虚拟机和guest虚拟机之间共享的目录中成功编译了来宾VM。
我正在使用:
vagrant - 1.3.5
Maven - 3.2.1
VirtualBox - 4.3.8
此外,我发现此特定文件夹(C:
)未按此post编入索引。
编辑即使使用smb托管文件,我也会看到相同的错误。
为什么构建会在主机上成功,而不是来宾?
答案 0 :(得分:1)
有一个类似的问题,但主要是因为我是愚蠢的并且Eclipse在主机上运行,共享区域中的项目abd'自动构建'被选中。
所以每次maven删除目标文件时,eclipse都会重新创建它......
答案 1 :(得分:0)
在编译期间,Maven将Scala源文件编译为CLASS
个文件。
一个.class
文件的长度 161 。此文件的路径长度为~100。
161 + ~90 = ~261#超过Windows上的255路径长度
为了解决这个问题,@ monkjack告诉我如何将生成的CLASS文件的长度限制为75个字符 - https://stackoverflow.com/a/23138361/409976。