尝试对 Apache 的 Velocity 引擎进行一些小的更改。
这是我能做和不能做的事情。
我正在更改合并函数()。我所做的改变并不重要,因为我还没有做到。 ;) 现在我正在准备执行 println 语句触发。
我有两个对 merge() 的引用。如果我将函数更改为 mergeBAD() Eclipse 会告诉我它找不到 merge()。有道理吧?我曾经在我的类构建路径中包含下载速度时获得的两个 jar,但我使用提供的 src 文件创建了一个项目,并将该项目用作依赖项。同样,当我将其重命名为 mergeBAD 时找不到 merge() 的事实给了我希望。
但是当我运行我的网络服务器时,遇到断点并进入合并调用,它找不到源!我再次将其指向该项目,它“找到”了源代码,我所做的任何更改(特别是 println 语句)都没有被命中。它们只是被跳过。 :(
上帝创造的绿色地球可能是什么原因造成的?这让我发疯。今天我花了一整天的时间试图找出问题所在。如果无法更改速度,我就无法继续。 Eclipse 运行速度文件的具体代码库是什么?
提前非常感谢! :)
最佳答案
这是构建类路径和运行时类路径之间混淆的典型案例。
您的构建类路径包含对您的Java项目的引用(包含对Velocity的更改)...但我敢打赌您的运行时类路径包含对原始Velocity JAR文件的引用.
在 Eclipse 下的 Web 项目(WTP - Web 工具项目)中管理构建类路径和运行时类路径在过去的几个 WTP 版本中经历了巨大的变化。我们可以指导您完成。如果您将 Velocity 的 JAR 文件物理添加到 WEB-INF/lib
中,让我们从删除它们开始。
好的,删除 Velocity.jar
后文件来自WEB-INF/lib
,执行以下操作:
- 右键单击该项目,选择“属性”。
- 转到“Java 构建路径”。选择“项目”选项卡,并确保您的自定义 Velocity 项目(我们称之为“MyVelocity”)不在那里。
- 仍然在“Java 构建路径”中,选择“库”选项卡并确保其中也没有 Velocity JAR。
按照上述步骤,我们清除了您的 Web 应用程序中对 MyVelocity(您的项目)或任何其他 Velocity JAR 的任何引用。
现在到了有趣的部分。我将指导您如何正确地将 Java 项目作为依赖项“添加”到 Web 项目中。
- 仍在项目属性中,转到
Deployment Assembly
. - 点击“添加”。
- 选择“项目”,然后选择“下一步”。
- 选择“MyVelocity”并确保选中“Web Library Reference”复选框。
- 点击“完成”。
返回Deployment Assembly
对话框,您现在应该看到 MyVelocity
映射到WEB-INF/lib/MyVelocity.jar
.
单击“确定”。
我们所做的是将 MyVelocity 映射为 WEB-INF/lib
依赖性。通过这样做,MyVelocity
也会自动添加到编译时构建路径中 - 因此非常重要的是您不要自己将其添加到构建路径中,从而导致重复的构建路径条目。 p>
现在一切都应该适合你了。如果您有任何问题,请告诉我。
附注如果您正在开发独立的 WAR 项目,这些说明是正确的;如果您的 WAR 文件是 EAR 的一部分,您可能希望(在某些情况下,例如 MyVelocity
被 EAR 内的其他 J2EE 模块使用)映射 MyVelocity
以不同的方式,到一个共同的位置;如果是这样,请告诉我,我将进一步详细说明。
关于Eclipse 及其如何处理 JARS —— 奇怪的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3886530/