Maven工程在命令行正常在开发工具下出错的问题

分类: 工作记录 0人评论 selfly 1年前发布

因为某些文件需要在Windows下才能看,不得已回到Windows下来逛一圈。

因为系统的不同,某些常识性的蛋疼问题总是不断。比如今天一个Maven的错误就折腾了我不少时间。

在项目中添加了一个依赖的jar包后,发现不管怎么弄就是下载不到依赖的jar,修改Maven配置文件settings.xml添加第三库依旧无效,但是在nexus直接查询却是有的。

重新引入了一下maven依赖后,见下图,发现项目中所有的jar都找不到了,连项目中多模块的实体类都出错。

image

但是奇怪的是在命令行下直接打maven命令正常,idea中就是不行,以为跟上次一样maven版本问题,先后降了几个版本尝试,错误依旧。

最后在无意中设置了一下maven的本地库文件夹,居然正常了(以前从来没有设置过,都是走默认):

image

这样看来是本地库文件夹的问题了,打开settings.xml,发现是这样设置的:

<!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ~/.m2/repository-->
  <localRepository>~/.m2/repository</localRepository>

这是直接从Linux中拷贝过来的,在我的主观意识中认为这应该就是在当前用户的用户文件夹下,可是windows却不这样认为,将目录改成绝对路径:

<localRepository>C:/Users/liyd/.m2/repository</localRepository>

一切正常了,折腾我半天的原因居然是这个!!

发现在项目文件夹中,有一个“~”文件夹,没错,走到这里来了,这里面就是.m2目录。看来windows不会把~当成用户home,而是认为在当前路径下有个文件夹为~。

可是为什么我用户目录下也会有.m2文件夹了,命令行正确难道命令行走的是这个?看来是目录引用有偏差导致。

顺便说一下,最新版的idea(14.1.1)已经支持maven 3.1.1了,但是JDK必须要1.7以上才行,不然会报出如下错误:

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClassFromSelf(ClassRealm.java:401)
    at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:42)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:254)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239)
    at org.codehaus.plexus.classworlds.launcher.Launcher.getMainClass(Launcher.java:144)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:266)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
    at org.codehaus.classworlds.Launcher.main(Launcher.java:47)

maven 3.1.1以下才支持JDK1.6。