final File felixRepo = util.resolveFile("target/felix-local-repository");
final File felixConfig = testData().resolveFile("felix.properties");
// ensure we have an obr.xml
final Content content = content();
final Location obrLocation = new Location(repoId, ".meta/obr.xml");
content.download(
obrLocation,
new File(testIndex().getDirectory("downloads"), repoId + "-obr.xml")
);
FileUtils.deleteDirectory(new File(felixHome, "felix-cache"));
FileUtils.deleteDirectory(new File(felixRepo, ".meta"));
final ProcessBuilder pb = new ProcessBuilder(
"java", "-Dfelix.felix.properties=" + felixConfig.toURI(), "-jar", "bin/felix.jar"
);
pb.directory(felixHome);
pb.redirectErrorStream(true);
final Process p = pb.start();
final Object lock = new Object();
final Thread t = new Thread(new Runnable()
{
public void run() {
// just a safeguard, if felix get stuck kill everything
try {
synchronized (lock) {
lock.wait(5 * 1000 * 60);
}
}
catch (final InterruptedException e) {
// ignore
}
p.destroy();
}
});
t.setDaemon(true);
t.start();
synchronized (lock) {
final InputStream input = p.getInputStream();
final OutputStream output = p.getOutputStream();
waitFor(input, "g!");
output.write(
("obr:repos add " + nexus().getUrl() + "content/" + obrLocation.toContentPath() + "\r\n").getBytes()
);
output.flush();
waitFor(input, "g!");
output.write(