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

问题描述 投票:0回答:5

这是我的 .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 使用新添加的外部 jar 的相对路径吗?

谢谢。

eclipse
5个回答
24
投票

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

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

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

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


3
投票

在 Eclipse 中,右键单击项目,选择 Properties,然后选择 Java Build PathLibraries 选项卡并选择“Add Jars”...这将使用 相对路径 添加它。 “添加外部 JARs”添加带有 绝对路径的 jar,这不是您想要的。


2
投票

请注意,Eclipse 相对路径应以单点开头

而不是

<classpathentry kind="lib" path="../3rd_party/example.jar"/>

你需要使用

<classpathentry kind="lib" path="./../3rd_party/example.jar"/>

第一种方法有时可能有效,但第二种方法总是有效。

这非常令人困惑,因为类路径中可能有 5 个条目与开头的“..”一起使用,而其他条目则无法使用它。

将所有引用更改为首先从单个点开始。


1
投票

如果您的路径与 Eclipse 安装相关,请使用“添加变量...”按钮(在 [Project] → Properties → Java Build Path → Libraries 中)声明它们。在那里,您应该会看到一个名为

ECLIPSE_HOME
的变量,然后您可以 Extend。这将在您的
.classpath
中生成“kind=var”条目(而不是“kind=lib”)。

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

如果您的路径相对于其他地方,您可以声明自己的变量(配置变量)。这样,当您的工作区发生更改或有人复制它时,您只需更新这些变量即可。这通常比以一两个点开头的真实相对路径更清晰。


0
投票

Eclipse 似乎不能容忍文件名中的某些字符(有缺陷),这可能就是 @thedrs 指出“其他人无法使用它”的原因。简单的“../”(@mark ad me)或“./../”(@thedrs)或“VAR_NAME/”(@Renardo)同样有效。是文件名破坏了一切。

  • 最低容忍度:[小写字母]、[一个句号]、[减号“-”]
  • 最低程度的不尊重:[大写字母]、[多个句点]、[数字]

这些正是我想到的,在 Windows 10 中使用 Eclipse 进行测试版本:2021-06 (4.20.0),构建 ID:20210612-2011;我没有测试所有字符。在这种情况下,@mark 被咬了,因为他的文件名中有多个句点字符,而且文件名中也有数字。将文件名更改为“test-bug.jar”并查看其工作情况,创建文件“test1-bug.jar”并查看其失败)。 @mark 为在他的 jar 名称中保留标识版本号而感到羞耻。令人遗憾的是 Eclipse 现在支持模式和/或文件夹以及单个 jar 名称。

幸运的是,我的文件名中有更广泛的字符组合,其中一些有版本,有些没有,经过半天的坚持,这一定是一个错误,注意到了这种模式。

© www.soinside.com 2019 - 2024. All rights reserved.