我使用Eclipse和"外部"项目 - 即从现有源创建的项目.
在工作区文件中查找,我找不到对这些项目的任何引用.我的问题是:Eclipse如何跟踪这些项目?
我希望能够自动将这样的项目添加到工作区(通过生成.project
和.classpath
文件).
我正在使用带注释的Hibernate(在spring中),并且我有一个对象,它有一个有序的,多对一的关系,一个子对象有一个复合主键,其中一个组件是一个外键回到父对象的id.
结构看起来像这样:
+=============+ +================+
| ParentObj | | ObjectChild |
+-------------+ 1 0..* +----------------+
| id (pk) |-----------------| parentId |
| ... | | name |
+=============+ | pos |
| ... |
+================+
Run Code Online (Sandbox Code Playgroud)
我尝试了各种注释组合,但似乎都没有.这是我能够提出的最接近的:
@Entity
public class ParentObject {
@Column(nullable=false, updatable=false)
@Id @GeneratedValue(generator="...")
private String id;
@OneToMany(mappedBy="parent", fetch=FetchType.EAGER, cascade={CascadeType.ALL})
@IndexColumn(name = "pos", base=0)
private List<ObjectChild> attrs;
...
}
@Entity
public class ChildObject {
@Embeddable
public static class Pk implements Serializable {
@Column(nullable=false, updatable=false)
private String parentId;
@Column(nullable=false, updatable=false)
private …
Run Code Online (Sandbox Code Playgroud) 我使用eclipse来处理最初独立于eclipse创建的应用程序.因此,应用程序的目录结构显然不适合日食.
我想以编程方式为应用程序生成一个项目.在.project
和.classpath
文件是很容易弄清楚,我已经了解到,项目存储在工作区下<workspace>/.metadata/.plugins/org.eclipse.core.resources/.projects
不幸的是,这里的一些文件(特别是.location
)似乎是以某种二进制格式编码的.在预感中我试图使用ObjectInputStream
- 无骰子反序列化它.所以它似乎不是一个序列化的java对象.
我的问题是:有没有办法自动生成这些文件?
对于好奇,我试图反序列化.location
文件的错误如下:
java.io.StreamCorruptedException: java.io.StreamCorruptedException: invalid stream header: 40B18B81
更新:我的目标是能够使用命令行脚本或程序替换New Java Project向导.原因是所讨论的应用程序实际上是一个非常大的J2EE/weblogic应用程序,我喜欢将其分解为一个较大的(近20个)子项目集合.更复杂的是,我们对SCM使用clearcase并为每个版本创建一个新分支.这意味着我需要为我创建的每个开发视图(分支)重新创建这些项目.这通常足以自动化.
我有一些c(++)代码使用sprintf将uint_64转换为字符串.这需要可移植到Linux和Solaris.
在linux上我们使用%ju,但在Solaris上似乎没有任何等价物.我能找到的最接近的是%lu,但这会产生不正确的输出.一些示例代码:
#include <stdio.h>
#include <sys/types.h>
#ifdef SunOS
typedef uint64_t u_int64_t;
#endif
int main(int argc, char **argv) {
u_int64_t val = 123456789123L;
#ifdef SunOS
printf("%lu\n", val);
#else
printf("%ju\n", val);
#endif
}
Run Code Online (Sandbox Code Playgroud)
在linux上,输出是预期的; 在Solaris 9上(不要问),它是"28"
我可以用什么?
我正在尝试定义在目标完成执行时发出(使用echo)消息的任务,无论该目标是否成功.具体来说,目标执行一个任务来运行一些单元测试,我想发出一条消息,指出结果的可用位置:
<target name="mytarget">
<testng outputDir="${results}" ...>
...
</testng>
<echo>Tests complete. Results available in ${results}</echo>
</target>
Run Code Online (Sandbox Code Playgroud)
不幸的是,如果测试失败,则任务失败并且执行中止.因此,只有在测试通过时才输出消息 - 与我想要的相反.我知道我可以将任务放在任务之前,但这会让用户更容易错过这条消息.我正在尝试做什么?
更新:事实证明我是愚蠢的.我的<testng>任务中有haltOnFailure ="true",这解释了我所看到的行为.现在的问题是,将此设置为false会导致整个ant构建成功,即使测试失败,这也不是我想要的.以下使用该任务的答案看起来可能是我想要的......
我正在用C#开发一个基于.NET4的应用程序,它作为一个Windows服务运行.
我希望这个应用程序能够通过定期连接的Web服务进行升级.有没有可以接受的方法来实现这一目标?它甚至可能吗?
我正在考虑它的方式是这样的:
这会有用吗?您可以从我的术语和方法中检测到我来自UNIX背景而不是Windows背景.我已经在UNIX上使用了这种方法,但我不知道可能存在哪种类型的窗口...
更新:我对这个问题的主要动机是围绕自我更新的.NET应用程序的技术可行性(如何进行.DLL的就地替换等).正如评论中所指出的,实现这样的功能还涉及许多其他考虑因素,特别是关于验证所应用的新软件组件的安全问题实际上是合法的.这些也很重要,但不是特定于.NET或Windows(imo).当然欢迎对这些领域的评论,但目前他们不是我主要关注的问题......
我正在使用 jmockit 进行单元测试(使用 TestNG),并且我在使用 Expectations 类来模拟使用匹配器将原始类型(布尔值)作为参数的方法时遇到了问题。下面是一些说明问题的示例代码。
/******************************************************/
import static org.hamcrest.Matchers.is;
import mockit.Expectations;
import org.testng.annotations.Test;
public class PrimitiveMatcherTest {
private MyClass obj;
@Test
public void testPrimitiveMatcher() {
new Expectations(true) {
MyClass c;
{
obj = c;
invokeReturning(c.getFoo(with(is(false))), "bas");
}
};
assert "bas".equals(obj.getFoo(false));
Expectations.assertSatisfied();
}
public static class MyClass {
public String getFoo(boolean arg) {
if (arg) {
return "foo";
} else {
return "bar";
}
}
}
}
/******************************************************/
Run Code Online (Sandbox Code Playgroud)
包含调用 invokeReturning(...) 的行抛出 NullPointerException。
如果我将此调用更改为不使用匹配器,如下所示:
invokeReturning(c.getFoo(false), "bas");
Run Code Online (Sandbox Code Playgroud)
它工作得很好。这对我没有好处,因为在我的真实代码中,我实际上是在模拟一个多参数方法,我需要在另一个参数上使用匹配器。在这种情况下,Expectations 类要求所有参数都使用匹配器。
我很确定这是一个错误,或者可能无法将 …