Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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).

  • testPhantom.jar
    • phantomjs.exe
    • MainTest.java

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?

like image 485
contactabbas Avatar asked Apr 29 '26 23:04

contactabbas


1 Answers

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");
like image 159
contactabbas Avatar answered May 01 '26 11:05

contactabbas



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!