如何防止AntClassLoader和URLClassLoader导致链接错误?
由于项目较旧,junit和hamcrest.core被放入ANT_HOME,我们的构建使用includeantruntime = true来运行单元测试。
我现在正在开发一个用ant构建的项目,我不想依赖ANT_HOME中的任何jar文件。我虔诚地在所有javac节中使用includeantruntime = false。
但是,现在我正在使用hamcrest进行测试,我收到运行时链接错误。
order-details.php
junit运行测试时发生运行时链接错误。
我似乎有两个选择,我都不喜欢:
我原以为includeantruntime会有所帮助。
我的目标是允许junit和hamcrest.core保留在ANT_HOME中,同时将它们包含在项目中。也就是说,ANT_HOME的内容无关紧要。
这个问题有解决方法吗?
答案 0 :(得分:2)
解决此问题有两个步骤:
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void setSlowo(QString s) { slowo = s; }
QString getSlovo() const { return slovo; }
// same for wprowadzone
private slots:
......
private:
Ui::MainWindow *ui;
Slowka s;
QString slowo;
QString wprowadzone;
};
添加到测试环境的类路径中。<pathelement path="${java.class.path}" />
添加到junit元素的属性中。您还可以为junit元素选择fork模式。例如,我使用了fork="true"
。 forkmode="once"
应保持includeantruntime
。
允许junit to fork显式地将junit类加载器与ant类加载器分开,以防止任何无意的关联。需要java.class.path来显式地允许ant查找执行所需的所有类。
使用这些设置,不会使用ant lib目录中的库,也不会干扰JUnit测试。
答案 1 :(得分:0)
设置&#34; includeantruntime = false&#34;是一件好事。它强制你的构建更独立,更少依赖于本地机器的配置,我喜欢称之为#34;魔术构建服务器&#34; (没有人真正知道它是如何工作的)
我使用Apache ivy来管理我的ANT类路径依赖项。以下给出了在本地&#34; lib&#34;中使用jar的示例。目录:
常春藤的真正力量是将它与Maven存储库结合使用。您的源代码仍然可移植,但不必与其所有第三方jar一起发货。起初它似乎令人生畏,但这是一种值得研究的方法。 Maven有些事情是正确的:-)
希望这有帮助。