如何指示Eclipse记录外部jar的相对路径?

时间:2011-11-29 21:26:17

标签: eclipse

这是我的.classpath文件,在我添加了两个外部jar(org.restlet.ext.simple.jar和org.simpleframework.jar)之后:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
    <classpathentry kind="lib" path="../3rd_party/restlet-jse-2.0.10/lib/org.restlet.ext.jackson.jar" sourcepath="C:/Program Files/Java/restlet-jse-2.0.10/src">
        <attributes>
            <attribute name="javadoc_location" value="file:/C:/Program Files/Java/restlet-jse-2.0.10/docs/ext/"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="lib" path="../3rd_party/restlet-jse-2.0.10/lib/org.restlet.ext.ssl.jar" sourcepath="C:/Program Files/Java/restlet-jse-2.0.10/src">
        <attributes>
            <attribute name="javadoc_location" value="file:/C:/Program Files/Java/restlet-jse-2.0.10/docs/ext/"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="lib" path="../3rd_party/restlet-jse-2.0.10/lib/org.restlet.jar" sourcepath="C:/Program Files/Java/restlet-jse-2.0.10/src">
        <attributes>
            <attribute name="javadoc_location" value="file:/C:/Program Files/Java/restlet-jse-2.0.10/docs/api"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="lib" path="../3rd_party/restlet-jse-2.0.10/lib/org.jsslutils_1.0/org.jsslutils.jar"/>
    <classpathentry kind="lib" path="../3rd_party/restlet-jse-2.0.10/lib/org.codehaus.jackson_1.4/org.codehaus.jackson.core.jar"/>
    <classpathentry kind="lib" path="../3rd_party/restlet-jse-2.0.10/lib/org.codehaus.jackson_1.4/org.codehaus.jackson.mapper.jar"/>
    <classpathentry kind="lib" path="../3rd_party/guice-3.0/aopalliance.jar"/>
    <classpathentry kind="lib" path="../3rd_party/guice-3.0/guice-3.0.jar"/>
    <classpathentry kind="lib" path="../3rd_party/guice-3.0/javax.inject.jar"/>
    <classpathentry kind="lib" path="C:/dev/poc/3rd_party/restlet-jse-2.0.10/lib/org.restlet.ext.simple.jar" sourcepath="C:/Program Files/Java/restlet-jse-2.0.10/src">
        <attributes>
            <attribute name="javadoc_location" value="file:/C:/Program Files/Java/restlet-jse-2.0.10/docs/ext/"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="lib" path="C:/dev/poc/3rd_party/restlet-jse-2.0.10/lib/org.simpleframework_4.1/org.simpleframework.jar"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

请注意,它们已添加了绝对路径,与其他具有相对路径的条目不同,但仅限于每次添加新外部jar时我手动编辑此文件。

我的问题是,我可以告诉Eclipse使用新添加的外部罐子的相对路径吗?

感谢。

3 个答案:

答案 0 :(得分:19)

一种解决方案是不使用外部罐子,而是将罐子放入项目中,然后使用Add Jar(s)代替Add External Jar(s)。

从源代码控制的角度来看,这是有道理的,您可以根据需要添加/删除依赖项。这也意味着当你为一个单独的项目更新一个jar时,它不会影响这个。

我们过去做过这个,我们有一个项目,其中包含所有的jar,这些都是在其他项目的构建路径中引用的。

但现在我们使用maven,所以我们不再需要这样做了。

答案 1 :(得分:4)

在eclipse中,右键单击项目,选择属性,然后选择 Java构建路径选项卡,然后选择“添加Jars “......这将添加相对路径。 “添加外部JAR ”会为jar添加绝对路径,这不是您想要的。

答案 2 :(得分:1)

如果您的路径是相对于Eclipse安装的,则使用“添加变量…”按钮对其进行声明(在[项目]→属性→Java构建路径→库中)。在那里应该为您提供一个名为ECLIPSE_HOME的变量,然后您可以对其进行扩展。这将在您的.classpath中生成一个“ kind = var”条目(而不是“ kind = lib”)。

<classpathentry kind="var" path="ECLIPSE_HOME/...

如果您的路径相对于其他位置,则可以声明自己的变量(配置变量)。这样,当您的工作空间更改或有人对其进行复制时,您只需要更新这些变量即可。这通常比具有以一或两个点开头的真实相对路径更清楚。