Linux Vagrant共享驱动器上的Maven Clean失败

时间:2014-04-15 16:08:49

标签: maven virtual-machine virtualbox vagrant

使用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个目录中的大部分(如果不是全部)都具有广泛开放(766777)权限。

过去,我已在guest虚拟机和guest虚拟机之间共享的目录中成功编译了来宾VM。

我正在使用:

vagrant - 1.3.5
Maven - 3.2.1
VirtualBox - 4.3.8

此外,我发现此特定文件夹(C:)未按此post编入索引。

编辑即使使用smb托管文件,我也会看到相同的错误。

为什么构建会在主机上成功,而不是来宾?

2 个答案:

答案 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