2015-08-28 74 views
0

我已成功在Android上部署jetty 7嵌入式服务器问题是我无法将其设置为访问我的文件夹jar文件(jar文件在PC上完美运行,并具有自包含的依赖关系,它在android上作为外部库添加)。我希望将此文件夹设置为resourceBase我的嵌入式web应用程序jetty在Android中的外部Java库(又名jar文件)中设置资源库

这里是完整的代码

  System.out.println(" server init attempt on port:"+curPort); 
      ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); 
      Server server = new Server(curPort); 
      server.setHandler(context); 
      context.setContextPath("/");   
      System.out.println(" servlet main initing"); 
      DSSServer servlet = new DSSServer(); 
      context.addServlet(new ServletHolder(servlet), "/DSS"); 
      ResourceHandler res = new ResourceHandler(); 
      System.out.println(" getting resBase:"); 
      //[code above works fine] 

      //[!ATTENTION HERE!] 
      String resDir = "/dss_core/HTML5/webapp"; 
      //This runs on PC fine but creates a null pointer exception in Android 
      String resurl = DSSServer.class.getResource(resDir).toExternalForm(); 
      //Here is another non-working varient 
      //String resurl = servlet.getClass().getClassLoader().getResource(resDir).toExternalForm(); 

      //[code below works fine] 
      res.setResourceBase(resurl); 
      res.setDirectoriesListed(true); 
      context.setHandler(res); 
      System.out.println(" servlet main inited"); 

这是代码块,使空指针异常

  String resDir = "/dss_core/HTML5/webapp"; 
      //This runs on PC fine but creates a null pointer exception in Android 
      String resurl = DSSServer.class.getResource(resDir).toExternalForm(); 
      //Here is another non-working variant 
      //String resurl = servlet.getClass().getClassLoader().getResource(resDir).toExternalForm(); 

在Android中访问外部java库资源文件夹的正确方法是什么?我知道Android有它自己的资源管理系统,但是我不能将本地Android代码放到我的外部Java库中,因为它是专门用于PC的jar文件。

的替代方法我可以做的是提取我的资源库到本地文件夹,但它留下吨的临时文件

我宁愿不做

BTW Android有没有问题,在同一时间访问一个文件从我的Java的lib里面

  //Accessing individual files work on Android 
      InputStream input = DatabaseManager.class.getResourceAsStream("/h2db.mv.db"); 
+0

在你试图在Android上使用它之前,你有没有'dex'-ify你的外部Java库? (或者它现在是'art'-ify吗?) –

+0

是的,只有jetty7可以是dexed,在IOS(roboVM)中也有同样的成功事例,jetty 8和9不能被排除,所以我被jetty7 – jyonkheel

+0

看起来像我会回答我自己的问题,我会稍后更新 – jyonkheel

回答

0

看来这样是不可能的,我结束了在安卓(如/mnt/sdcard/.myApp/temp)某处提取文件和手动复制每一个文件有

String resDir = "/dss_core/HTML5/webapp"; 
String resurl = dss_core.util.DRYcode.platformIsAndroid()?"file:/mnt/sdcard/protected/"+servletName: 
       DRYcodeWeb.class.getResource(resDir).toString(); 
if (dss_core.util.DRYcode.platformIsAndroid()) 
    for (String str:resourceList) 
     DRYcode.copy_("/dss_core/HTML5/webapp/"+str,"/mnt/sdcard/protected/"+servletName+"/"+str);