动手解决Maven在offline模式中无法使用的BUG

来源:互联网 发布:scratch2.0趣味编程 编辑:程序博客网 时间:2024/06/06 16:01
    

     本文主要解决以下问题:

    1. 使用到tycho,且tycho的版本低于0.25.0

Tycho大大简化了Eclipse、OSGi插件中的pom.xml,它实际上是一系列专用于build Eclipse插件和OSGi模块的maven插件的集合。 
     2.需要offline模式,但是又不想要建私服

     3.在offline模式下,出错主要信息是:Repository system is offline and no local cache available for...



Ray根本原因

这是tycho的一个BUG,在0.25.0版本已经修复,所以本文只适合0.25.0版本以下

tycho的wiki信息:

https://wiki.eclipse.org/Tycho/Release_Notes/0.25


查看该版本的bug fixes,就是下面这个 474885 的ID



修复该bug的git网址是:

http://git.eclipse.org/c/tycho/org.eclipse.tycho.git/commit/?id=0e5f1f6d39f1acc50e904c8acac9f1f2cded4b53


修复该bug的commit点是:

0e5f1f6d39f1acc50e904c8acac9f1f2cded4b53


comments信息:



Ray下面来一步步解决该问题

1、下载tycho的源码(如果https无法访问,尝试改为http)

git clone https://git.eclipse.org/r/tycho/org.eclipse.tycho

2、切换到目标工程中使用tycho版本的tag点,例如这里使用的版本是0.20.0:

git check tycho-0.20.0

3、根据commit点(0e5f1f6d39f1acc50e904c8acac9f1f2cded4b53)的diff信息 同步到当前的tag点(0.20.0)中

      注意不要完成复制,因为修改的java文件(RemoteRepositoryCacheManager.java)中,

      当前tag点(0.20.0)中有些 import信息 跟commit点(0e5f1f6d)是不同的。例如:

     commit点(0e5f1f6d)用到的是

 

  

   而tag点(0.20.0)用到的是

  

  

   这种情况,就不需要改为commit(0e5f1f6d)中的一样,反正视情况而定。


4、 然后在可以联网的机器上使用命令

mvn clean install -Dmaven.test.skip=true
  不需要测试用例,使用-Dmaven.test.skip=true

  此次mvn命令中Maven最好使用新的repository,因为是一个临时的,最终只需要其中的一部分文件

5、可以发现是编译不通过的,原来是修改的java文件(RemoteRepositoryCacheManager.java)中重写了一个方法(createCacheFromFile)

    该方法在当前tag(0.20.0)中的父类中是没有的。文件就是这个import信息中提到的。


  现在需要更新该父类所在的文件(org.eclipse.equinox.p2.repository.jar)。


6、java文件(CacheManager)属于rt.equinox.p2项目,使用git下载

git clone http://git.eclipse.org/gitroot/equinox/rt.equinox.p2.git

7、查看java文件(CacheManager)的log信息

bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/CacheManager.java
可以发现方法(createCacheFromFile)是2015-04-28增加的。然后切换到这个日期之后的一个tag点,例如(R4_5)

8、然后使用mvn clean install ,生成新的org.eclipse.equinox.p2.repository.jar文件。然后回到第4点继续


9、另外一种简便的方法解决org.eclipse.equinox.p2.repository.jar文件

下载4.5版本eclipse,

可以下载platform版本(http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops4/R-4.5-201506032000/eclipse-platform-4.5-win32.zip

然后将plugins目录中的文件(org.eclipse.equinox.p2.repository_2.3.100.v20150428-1613.jar)复制

找到第4点中mvn中使用到的repository,进入以下目录

repository\p2\osgi\bundle\org.eclipse.equinox.p2.repository
查看该文件中的文件夹,当前tag(0.20.0)使用的是2.3.0.v20130412-2032

进入该文件夹,删除已存在的jar文件,粘贴刚才复制的jar文件,改名跟刚才删除的jar文件一致

这样回到第4点继续


10,回到第4点,继续,能往下走了。


11、最终文件生成的位置

repository\org\eclipse\tycho\org.eclipse.tycho.p2.resolver.impl\0.20.0
如果包含多个文件,关键文件只有3个

_maven.repositories org.eclipse.tycho.p2.resolver.impl-0.20.0.jarorg.eclipse.tycho.p2.resolver.impl-0.20.0.jar.sha1

_maven.repositories:

文件夹文件列表信息,如果只用下面两个文件,打开该文件将多余的信息删除,如果需要使用0.20.0文件夹中所有文件,该文件不需要修改


12、将第11 点中提示的文件夹拷贝到 目标工程的离线仓库的同样位置。

13、将第8或者第9中的修改同样修改到目标工程的离线仓库中,离线仓库中使用的版本是什么,org.eclipse.equinox.p2.repository.jar文件就修改带什么文件夹中


最后,

能升级tycho版本的最好升级版本,0.25.0版本已修复该问题

能升级tycho版本的最好升级版本,0.25.0版本已修复该问题

能升级tycho版本的最好升级版本,0.25.0版本已修复该问题



0 0