好的,我很沮丧!我已经狩猎了好几个小时,我仍然难过.
环境:WinXP,Eclipse Galileo 3.5(直接安装 - 无需额外插件).
所以,我有一个简单的JUnit测试.它从内部Eclipse JUnit运行配置运行良好.这个类没有依赖任何东西.为了尽可能缩小这个问题,它只包含:
@Test
public void testX() {
assertEquals("1", new Integer(1).toString());
}
Run Code Online (Sandbox Code Playgroud)
到目前为止没有汗水.现在我想采取从Ant内部运行此测试用例的超级高级步骤(最终目标是与Hudson集成).
所以,我创建了一个build.xml:
<project name="Test" default="basic">
<property name="default.target.dir" value="${basedir}/target" />
<property name="test.report.dir" value="${default.target.dir}/test-reports" />
<target name="basic">
<mkdir dir="${test.report.dir}" />
<junit fork="true" printSummary="true" showOutput="true">
<formatter type="plain" />
<classpath>
<pathelement path="${basedir}/bin "/>
</classpath>
<batchtest fork="true" todir="${test.report.dir}" >
<fileset dir="${basedir}/bin">
<include name="**/*Test.*" />
</fileset>
</batchtest>
</junit>
</target>
</project>
Run Code Online (Sandbox Code Playgroud)
$ {basedir}是工作空间中包含源,类和构建文件的Java项目名称.所有.java和build.xml都在$ {basedir}/src中..class文件位于$ {basedir}/bin中.
我已经通过Windows/Preferences/Ant/Runtime/Contributed Entries将eclipse-install-dir/plugins/org.junit4_4.5.0.v20090423/junit.jar添加到Ant运行时类路径中.ant-junit.jar在Ant Home Entries中.
那么,当我运行这个疯狂复杂的目标时会发生什么?我的报告文件包含:
Testsuite: com.xyz.test.RussianTest
Tests run: 1, Failures: 0, Errors: 1, Time …Run Code Online (Sandbox Code Playgroud) 我认为这是一个简单的问题.我已经看过两种方式的例子.问题是 - "为什么我不能把我的注释放在场上?".让我给你举个例子....
@Entity
@Table(name="widget")
public class Widget {
private Integer id;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Integer getId() { return this.id; }
public Integer setId(Integer Id) { this.id = id;}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常(假设那里没有拼写错误).当注释被放置在物业的吸气剂上时,一切都是完美的.
然而,这对我来说似乎很尴尬.在我看来,将注释放在场上比较清晰,就像这样 -
@Entity
@Table(name="widget")
public class Widget {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
public Integer getId() { return this.id; }
public Integer setId(Integer Id) { this.id = id;}
}
Run Code Online (Sandbox Code Playgroud)
我见过两种方式的例子.但是,当我运行第二个例子时,我得到以下内容......
java.lang.NullPointerException
at com.widget.util.hibernate.HibernateSessionFactory$ThreadLocalSession.initialValue(HibernateSessionFactory.java:25)
at com.widget.util.hibernate.HibernateSessionFactory$ThreadLocalSession.initialValue(HibernateSessionFactory.java:1)
at java.lang.ThreadLocal$ThreadLocalMap.getAfterMiss(Unknown Source)
at java.lang.ThreadLocal$ThreadLocalMap.get(Unknown Source)
at java.lang.ThreadLocal$ThreadLocalMap.access$000(Unknown Source)
at java.lang.ThreadLocal.get(Unknown Source)
at com.widget.util.hibernate.HibernateSessionFactory.get(HibernateSessionFactory.java:33) … 有没有人有一个"hello world"示例或教程来创建Eclipse插件片段?
我有一个工作主机插件,为了简单起见,就是这个......
public void start(BundleContext context) throws Exception {
System.out.println("Hello....");
super.start(context);
plugin = this;
}
public void stop(BundleContext context) throws Exception {
System.out.println("Goodbye...");
plugin = null;
super.stop(context);
}
Run Code Online (Sandbox Code Playgroud)
足够简单,有效.现在我想向该主机添加一个片段,这似乎不像创建一个插件主机那么简单.我只是没有看到如何创建一个片段项目并为其添加逻辑.假设我只是想做一些简单的事情并让片段打印出"Hello2" start()和"Goodbye2" stop().有人可以给我一个有效的例子吗?
有人知道保证插件启动顺序的方法吗?我有一个我想开发的插件,它将为我无法修改的第三方插件提供运行时配置信息.
所以,我想确保我的插件总是在第三方之前完成.
Eclipse 3.3,BTW.