一言难尽的eclipse转IDEA

见鬼的背景

我真傻,真的。java

最近要在一个对日的java项目中作一些开发。spring

这个项目有十多年了,java工程开发一直用的eclipse + maven1。对,你没有看错,就是那个官方连文档都已经再也不提供的maven1。。。更无语的是,咱们本地开发不能连外网,以前也没有搭建maven私服,因此开发环境事实上是把maven的本地仓库拷贝到本地,而后在eclipse工程中设置一个叫MAVEN_REPO的环境变量,从这个变量导入全部的依赖包。。。emmmm。。。尽情吐槽懒惰的咱们吧。。。eclipse

而后,自从我开始使用IDEA社区版之后,就不再想用eclipse了。。。此次回到对日项目,为了开心地写代码,我天然而然萌生了把eclipse的工程导入到idea中的想法。idea自己就有导入eclipse工程的功能,but,事情固然不会像傻傻的我想象的那样顺利。。。maven

曲折的通过

永远不会被采纳的上策

原本嘛,既然工程是maven工程,直接做为maven工程导入是最简单也最靠谱的。。。但是就像一开始说的,由于咱们没有maven私服,因此还须要先搭建个支持maven1私服,这个简单,搭建一个nexus2服务就是。(nexus3不支持maven1仓库。。。)ide

以后,找人手动上传了依赖jar包到咱们的maven1私服。。。可是。。。若是我想把工程做为maven工程导入idea(idea与maven有版本兼容问题,如今的idea支持的基本都是maven3.x),我还得再作一个maven2仓库,再找人把那些jar转到maven2仓库(苦苦寻找maven1仓库直接转为maven2仓库的办法,包括用maven2代理maven1之类的,可耻的失败了。。。),而后还得把全部工程(十几个)的maven1的配置文件(maven.xml+project.xml)转为pom文件。。。总以为很麻烦。。。svn

因此,和历史上永远不用上策的主公们同样,最靠谱的办法,被无奈地pass掉了。。。

无耻的指望

  1. 要是有人帮我上传全部的jar到maven2仓库,而后帮我把十几个工程的maven1配置文件转为maven2的pom文件,那该多好。。。
  2. 有没有高人知道maven1仓库直接转为mavan2仓库的办法?还望不吝赐教。。。

充满"惊喜"的下策

上策暂不可用,那么就暂时仍是用classpath环境变量MAVEN_REPO凑活着吧。。。emmmm。。。url

原来是一个eclipse的workspace下的十几个project,idea对应的是一个project下十几个module。来吧骚年。。。idea

  • 先用idea建立一个空的project,暂时不建立module
  • 而后经过VCS菜单的Checkout from version control -> subversion 从svn仓库下载十几个工程到project目录下,引导过程的最后,不要打开module,选No
  • 而后经过File -> New -> Module from existing sources 导入project目录下的原eclipse工程做为idea的Module
此处须要注意原来的工程之间若是有依赖关系,最好从依赖最底层开始导入Module。
  • 这个时候,代码固然是编译不过的,首先要设置jdk,而后固然仍是编译不过,由于全部MAVEN_REPO的依赖包都找不到。
到此为止,用上策仍是下策都是同样同样的。。。
  • 好吧,下策的表演开始了。。。先傻乎乎地把maven1本地仓库拷贝到我本地来;
  • 而后你须要在File -> settings -> Appearence & Behavior -> Path Variables中添加环境变量MAVEN_REPO,指向本地maven1仓库,而后别忘了重启IDEA;
  • 重启IDEA以后,你会发现依赖包都进入工程的External Libraries了,开心吧。。。呵呵,吐样吐森破。。。你会发现你的代码中仍是不少import失败,对应依赖包的类仍是找不到。。。WTF。。。
  • 而后咱们打开idea帮咱们自动生成的iml文件,会发现每一个library的class里的url的协议是file://,就像下面这样:
<orderEntry type="module-library" exported="">
      <library name="commons-net-2.0.jar">
        <CLASSES>
          <root url="file://$MAVEN_REPOSITORY$/commons-net/jars/commons-net-2.0.jar" />
        </CLASSES>
        <JAVADOC />
        <SOURCES />
      </library>
    </orderEntry>
上面的环境变量之因此是 MAVEN_REPOSITORY而不是 MAVEN_REPO,我猜啊,是由于IDEA的maven插件会使用 MAVEN_REPOSITORY这个环境变量指向maven2本地仓库,而我本地maven1仓库与maven2仓库固然是一个目录了。因此这里应该是idea把 MAVEN_REPO替换成了 MAVEN_REPOSITORY。。。至于IDEA为啥会替换这个,我猜想的缘由对不对。。。唉,你爱信不信,反正我信了。。。
  • emmmm。。。既然是引入jar,为何用file协议而不直接用jar协议。。。本着死马当活马医的精神,把url瞎改了一下:
<orderEntry type="module-library" exported="">
      <library name="commons-net-2.0.jar">
        <CLASSES>
          <root url="file://$MAVEN_REPOSITORY$/commons-net/jars/commons-net-2.0.jar" />
          <root url="jar://$MAVEN_REPOSITORY$/commons-net/jars/commons-net-2.0.jar!/" />
        </CLASSES>
        <JAVADOC />
        <SOURCES />
      </library>
    </orderEntry>
  • 而后。。。import失败的错误真的消失了。。。为何加个jar协议就行了?为何idea自动生成的iml用file协议?傻傻的我表示很懵逼。。。哪位高人知道缘由还烦请相告。。。
  • 期间还发生一件事。。。个人工程并非spring工程,可是编译的时候idea的spring插件报错了。。。只好先disable你了。。。

下策之因此是下策,由于真的很low

用这个下策吧,真的也很麻烦,由于你得改每一个iml的每一个依赖包的url。。。固然,若是你是一个一个module导入的,后面的module导入时自动生成的iml里的依赖包的url彷佛都是jar协议了。。。仍然让傻傻的我以为有点懵逼。。。spa

固然更low的仍是添加MAVEN_REPO这个环境变量,用来指向拷贝到本地的maven1仓库,而后idea又神奇的给你换成了MAVEN_REPOSITORY。。。感受在被嘲笑。。。插件

无奈的总结

  1. 尽可能仍是用纯粹的maven工程吧(谁帮我上传jar到maven2私服,以及转换maven1配置文件为pom啊。。。);
  2. idea对应eclipse的classpath环境变量在settingsAppearence & Behavior -> Path Variables中添加,而后不要忘记重启;
  3. iml中依赖包的class的url要改为jar://xxxxxx/xxxx!/,不要忘记最后的!/
  4. 不相干的插件就禁了吧。
相关文章
相关标签/搜索