contactabbas
contactabbas

Reputation: 832

How to use phantomjs.binary.path when PhantomJS is embedded inside a jar file?

I am using phantomjs for headless browser testing. I call phantomjs from within my java file (MainTest.java). The code runs fine in my local machine. I bundle both the phantomjs.exe and the calling java file inside a jar file (tetsPhantom.jar).

On the server, it is failing when it tries to find the phantomjs executable path:

String webDir = LiExportEmails.class.getProtectionDomain().getCodeSource().getLocation().toExternalForm(); // Returns http://myservername.com:8080/testPhatom.jar
System.setProperty("phantomjs.binary.path", webDir);

I have tried setting it to http://myservername.com:8080/testPhatom.jar!phantomjs.exe as well, but it still fails.

What should be the correct path of phantomjs located inside the same jar file as the caller?

Upvotes: 3

Views: 6265

Answers (2)

contactabbas
contactabbas

Reputation: 832

Solved it by using the approach from JNLP Webstart Launch Issue and Copying a binary file outside of a jar , with one change:

File f = new File ("./phantomjs.exe");
if (!f.exists()) {
  InputStream in = Myclass.class.getClassLoader().getResourceAsStream("phantomjs.exe");
  OutputStream out = new FileOutputStream("./phantomjs.exe");
  IOUtils.copy(in, out);
}
System.setProperty("phantomjs.binary.path","./phantomjs.exe");

Upvotes: 4

Artjom B.
Artjom B.

Reputation: 61962

I really don't think it is possible to execute an .exe from within a jar file even if you could resolve the path somehow. You should extract the phantomjs.exe.

Upvotes: 0

Related Questions