下载Eclipse插件更新站点以进行离线安装

81
我想安装的插件提供了一个更新站点用于安装。但我想要安装它的Eclipse安装程序所在的机器没有网络连接。有没有一种方法可以访问该网站(HTTP、FTP等)以便离线下载其中的文件进行安装?
8个回答

58

Eclipse提供了一种自动镜像这些站点的方法,可以通过命令行或ant任务来完成。

基于p2信息的镜像

$eclipse_home/eclipse -application org.eclipse.equinox.p2.artifact.repository.mirrorApplication -source $1 -destination $2
$eclipse_home/eclipse -application org.eclipse.equinox.p2.metadata.repository.mirrorApplication -source $1 -destination $2

参考: Equinox p2仓库镜像

基于site.xml信息的镜像

java -jar $eclipse_home/plugins/org.eclipse.equinox.launcher_*.jar -application org.eclipse.update.core.standaloneUpdate -command mirror -from $from -to $to

参考: 在命令行中运行更新管理器

您可以在我的脚本存储库中跟踪这些脚本的演变。


@vincentlcy - 这不是在“基于p2信息的镜像”标题中找到的吗? - Robert Munteanu
哦,抱歉,我不知道这是同一件事。在 Kepler 中,我似乎找不到这个 $eclipse_home/plugins/org.eclipse.equinox.launcher_*.jar。 - vincentlcy
我在我的Kepler安装中仍然有启动器jar文件,但我认为它是可选的。因此,我首先移动了“p2”部分,因为它是受支持的,并且看起来与您链接的部分完全相同。感谢您的贡献 :-) - Robert Munteanu
@darthbinamira,你应该使用b3聚合工具来获取你的插件所需的所有依赖项。请参见我新添加的答案:https://dev59.com/mHM_5IYBdhLWcg3wdy1g#32010272 - PolyTekPatrick
显示剩余4条评论

12

在尝试了镜像一段时间后,我意识到对我来说使用 "wget" 要容易得多。

简而言之:

  1. 下载网站:

    wget --recursive --no-parent http://url.of/updatesite

  2. 获取下载的更新网站内容并将其移动到您的离线环境中

  3. 通过“本地…”按钮将离线更新站点目录添加到可用软件站点列表中。

您可以在此处阅读更多详细信息。


最简单的方法是:我主要的问题是找到 Jubula 的 URL。download.eclipse.org 网站将内容隐藏在“显示目录内容”链接后面,最终我猜测使用了 http://download.eclipse.org/jubula/release/mars/ 这个链接。 - user3132194
1
这个也对于存储在S3或其他对象存储中的内容失效,因此无法提供可爬取的网站。 - Daniel Holmes
嗯,三年前它基本上是有效的。当时大多数插件都没有使用对象存储... - Anton
1
wget --recursive --no-parent http://download.eclipse.org/releases/kepler/ 但是它只下载了xml文件。我该如何下载完整的文件? - AhmedRana

9
大多数Eclipse插件可以通过将更新站点提供的所需JAR文件复制到Eclipse安装的plugins和features目录中来安装,而无需使用Eclipse更新程序。
在某些情况下,需要使用-clean开关启动Eclipse。
以下是如何为m2eclipse插件执行此操作的示例:
  1. m2eclipse的更新网站是http://m2eclipse.sonatype.org/update。确定所需JAR列表是第一步。通常可以在site.xml文件中找到;在这种情况下,您将在http://m2eclipse.sonatype.org/update/site.xml中找到它。
  2. 过滤要下载的JAR列表以使用插件的版本为准。每个“feature”的版本属性可以确定此版本。如果您很幸运,您会在类别节点中找到JAR的描述。
  3. 请注意需要下载的每个JAR的url属性。这将包括服务器上可用的JAR的子目录,以及它们需要放置在Eclipse安装中的目录。

PS:此方法有点hackish,但基于站点地图参考。但请参阅更新。

更新

我没有尝试过,但你可以创建一个本地镜像站点,其他人可以从那里获取Eclipse插件。在Galileo中,可以通过运行镜像命令下的独立模式Eclipse更新器来完成这个操作。


尝试了您的第一个建议。成功找到并下载了JAR文件,但它们似乎为空。将它们安装在“dropins”目录中并重新启动,但仍然没有任何变化。我将尝试您的其他建议。顺便说一下,我正在尝试安装的插件是来自http://download.eclipse.org/tools/mylyn/update/incubator/的Mylyn通用Web模板连接器。 - Chry Cheng
对于第一个建议,我尝试下载http://download.eclipse.org/tools/mylyn/update/incubator/features/org.eclipse.mylyn.sandbox.ui_feature_3.2.1.v20090722-0200-e3x.jar。下载过程中没有遇到任何问题。 - Vineet Reynolds
回顾一下,更新URL是http://download.eclipse.org/tools/mylyn/update/incubator,而site.xml中提到的文件是features/org.eclipse.mylyn.sandbox.ui_feature_3.2.1.v20090722-0200-e3x.jar。因此,JAR的有效URL为http://download.eclipse.org/tools/mylyn/update/incubator/features/org.eclipse.mylyn.sandbox.ui_feature_3.2.1.v20090722-0200-e3x.jar。 - Vineet Reynolds
1
仅获取功能是不够的,您需要插件。我建议尝试使用Eclipse更新程序创建站点的镜像。一旦完成,将其打包成zip文件,并将其用作更新管理器中的更新站点。 - zvikico
1
相同的插件可以从Mylyn下载页面以zip格式获得,网址为http://www.eclipse.org/downloads/download.php?file=/tools/mylyn/update/mylyn-3.2.1-incubator.zip。这应该是OP在本地分发插件的最简单方式。 - Vineet Reynolds

5
我刚刚遇到了这个问题,并通过按照指南中的说明解决了它。简而言之,在Eclipse文件夹中终端上运行以下命令:

  1. eclipsec.exe -application org.eclipse.equinox.p2.metadata.repository.mirrorApplication -source $1 -destination $2

  2. eclipsec.exe -application org.eclipse.equinox.p2.artifact.repository.mirrorApplication -source $1 -destination $2

其中$1是在线存储库的URL,$2是本地文件夹的路径。例如,在我的Windows桌面上下载Vrapper:

$1 = http://vrapper.sourceforge.net/update-site/stable/

$2 = C:/Users/foo/Desktop

将文件夹传输到没有互联网连接的机器上。然后启动Eclipse -> 帮助 -> 安装新软件。指定本地存储库(即刚刚传输的文件夹)进行安装。这样应该可以。

请不要重复回答,已经有一个正确的答案在同一个问题中:https://dev59.com/mHM_5IYBdhLWcg3wdy1g#1907322。请给现有答案点赞并添加评论以进行小的贡献。 - Chry Cheng
当我第一次阅读现有的答案时,我并没有理解它,这就是为什么我搜索了额外的信息并在这里发布了我的答案。 https://stackoverflow.com/questions/38571201/installing-plugins-for-eclipse-offline 的OP也认为答案“似乎过时了”。但是,是的,我同意我应该发表评论,谢谢! - Zhiyuan-Amos
1
这个答案提供的指导比被采纳的答案清晰得多,而且这就是我使用的答案。感谢您提供它。 - John Jesus
1
这个问题的被采纳答案太简洁了。这个回答告诉了我所有我需要知道的东西以及每个变量的含义。我不应该必须成为一个Eclipse开发者才能理解这个答案。+1 - dan

5

您可以使用Ant任务镜像p2站点:

<target name="springide">
    <echo>springide</echo> 
    <p2.mirror verbose="true">
        <repository location="${REPO_HOME}/springide" name="springide" append="true"/>
        <source>
            <repository location="http://springide.org/updatesite" />
        </source>
        <iu id="Core / Spring IDE" version="" />
        <iu id="Extensions / Spring IDE" version="" />
        <iu id="Integrations / Spring IDE" version="" />
        <iu id="Resources / Spring IDE" version="" />
    </p2.mirror>
</target>

或者是findbugs:

<target name="findbugs">

<echo>findbugs</echo>
    <p2.mirror verbose="true">
        <repository location="${REPO_HOME}/findbugs" name="findbugs" append="true"/>
        <source>
            <repository location="http://findbugs.cs.umd.edu/eclipse/" />
        </source>
        <iu id="edu.umd.cs.findbugs.plugin.eclipse.feature.group" version="" />
    </p2.mirror>
</target>

为了使这个工作正常,您需要在与Eclipse相同的JVM中运行ant任务。
您可以通过打开“软件更新”并从那里复制来查找IU ID。在Eclipse 3.5中应该有一个“更多...”按钮,在3.4中您需要点击属性按钮。

4
Eclipse插件通常依赖于其他插件。追踪这些依赖关系有点困难。最好一次使用更新站下载所有依赖项,然后您可以分发给其他Eclipse dropins。对于Eclipse 3.4或更高版本,您可以使用dropins作为Eclipse功能。这样,每次重新安装Eclipse时,您就不必从更新站安装插件了。详见http://michsan.web.id/content/how-install-eclipse-plugins-offline
如果您无法查看网页,我将给您一些说明:
为外部插件准备目录
创建一个特殊的目录来容纳我们心爱的插件,例如,在/home/ichsan/eclipse-dropins中,我们将安装Maven插件:m2eclipse。
mkdir /home/ichsan/eclipse-dropins

现在我们将把这个目录称为DROPINS。
准备沙盒。接下来,我们将使用 Git 创建一个 Eclipse 沙盒。目的是在新的 Eclipse 上安装一个插件。为了避免每次想要安装新插件时都要安装新的 Eclipse,我们最好使用 Git 来创建新分支的新 Eclipse。
首先,将新的 Eclipse 解压/安装到一个目录中,比如 /home/ichsan/eclipse-sandbox(因此我们会找到 /home/ichsan/eclipse-sandbox/eclipse.ini)。我们将该目录称为ECLIPSE_SANDBOX。
接下来,提交新的安装文件。这一步应该只需完成一次。
cd $ECLIPSE_SANDBOX
git init
git add .
git commit -am "Fresh Eclipse"

在沙盒上安装插件

现在是有趣的部分。假设我们需要安装m2eclipse插件。我们将在新的Git分支上安装它,以使主分支保持干净或完整。

cd $ECLIPSE_SANDBOX
git checkout -b "m2eclipse"

现在,我们启动ECLIPSE_SANDBOX的Eclipse并下载插件。完成后,关闭Eclipse并检查新创建了哪些目录或文件(使用Git)。记住,我们只关心新的插件和功能目录以及其中的内容。因此,我们不会将其余部分复制到dropins中。
# Prepare the m2eclipse plugin directories
mkdir -p $DROPINS/m2eclipse/eclipse/plugins
mkdir -p $DROPINS/m2eclipse/eclipse/features

cd $ECLIPSE_SANDBOX
for f in $(git status | sed "s/#\t//g" | grep -P "^plugins" ); do cp -R $f $DROPINS/m2eclipse/eclipse/plugins; done
for f in $(git status | sed "s/#\t//g" | grep -P "^features"); do cp -R $f $DROPINS/m2eclipse/eclipse/features; done

# Make the directory read only
chmod -R -w $DROPINS/m2eclipse

# Commit changes
git add .
git add -u
git commit -am "M2Eclipse plugin installed"


# Back to master branch to make Eclipse clean again and ready for other plugin installations
git checkout master
Installing the plugin

只需将DROPINS/m2eclipse目录复制到ECLIPSE_HOME/dropins中,或创建一个符号链接即可。然后我们就完成了!
cd $ECLIPSE_HOME/dropins ln -s $DROPINS/m2eclipse

另一种方法是备份新的Eclipse提交和安装插件后提交之间的差异。
for i in `git diff hashFreshEclipse hashPluginInstall --name-only`;do 
  if [ -f $i ]; then
    tar -r -f m2e-android.tar $i
  fi
done
gzip m2e-android.tar

3

3
我发现 p2 的 mirrorApplication 在一些网站上效果不佳,会镜像重复的 artifacts (pack200 和 jar 版本都有)。b3 Aggregator 的效果要好得多,并且使自定义更新站点变得更加容易。请参阅手册:https://wiki.eclipse.org/Eclipse_b3/aggregator/manual 中的安装说明和详细信息。
我使用的基本步骤如下:
  • File > New > Other... > b3 > Repository Aggregation。
  • 选择 Aggregation 节点并将 Build Root 设置为聚合 repo 的目录。
  • 使用 R-click Aggregation 节点 > New Child > Configuration 添加你关心的平台。
  • 添加一个 Validation Set,通常将其 Label 设置为 main。
  • 如果你不需要来自主 Eclipse 存储库 (例如: http://download.eclipse.org/releases/mars) 的任何其他 bundle,则可以将其添加到 Validation Set 作为 Validation Repository,但通常需要将其作为 Mapped Repository 添加到 Contribution 下,以便下载依赖项和/或其他 Eclipse 功能。
  • 对于每个插件,都要添加一个带有 LabelContribution,并在其下添加至少一个带有 LocationMapped Repository
  • 如果需要,可以向 Aggregation 添加自定义类别节点;为它们分别指定独特的 DescriptionIdentifierLabel
  • 展开底部的 Repository Browser 节点 > 展开 repo url > 展开 Installable Units > 查看 Categories (如果存在) 和/或 Features 下的功能。
  • R-click 想要的功能并将其添加到自定义类别 (如果使用),否则作为 > Mapped Feature 添加到父映射存储库中。
  • R-click 任何节点 > Build Aggregation。
重要提示:如果不从给定存储库映射任何功能,则将镜像整个存储库 (我认为是所有 bundle 的最新版本,实际上不是存储库中的所有内容)。
我很幸运没有遇到排除规则或有效配置规则,因为它们似乎会让事情变得更复杂。但是,如果存储库包含具有依赖关系冲突的 bundle,则可能需要排除规则,其中一个或多个冲突的 bundle 需要被排除。
虽然b3聚合器通常只下载您映射的每个特性(及其依赖项)的最新版本,但是如果随着时间的推移反复使用“构建聚合”功能,随着新版本的发布,过时的版本将在您的聚合中累积。您可以使用“清洁并构建聚合”,但这意味着您必须重新下载所有内容。相反,只需添加另一个.b3aggr聚合文件,设置Build Root,添加Configurations,并添加一个Contribution,使用指向本地镜像的`final`目录的路径来映射Repository。不要映射任何特性或创建任何类别。然后构建聚合,仅从镜像中获取最新版本即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接