繁体   English   中英

来自Runtime.getRuntime.exec的ClassPathXmlApplicationContext

[英]ClassPathXmlApplicationContext from a Runtime.getRuntime.exec

我使用eclipse开发了一个Web应用程序以处理依赖项注入和要部署的Maven。 我正在努力使这个小代码:

public class MainExternal {


public static void main( String[] args ) throws Exception{


        @SuppressWarnings("resource")           ApplicationContext appContext = new ClassPathXmlApplicationContext( "classpath*:webConfiguration/applicationContext.xml");          ProjectBo projectBo                  = (ProjectBo) appContext.getBean("projectBo");

        System.out.println("-> Im 'in ");

        /************* PRINT OUT  *************/

        Project project = projectBo.findByNameOfStudy("Profiler");


        List<User> listUser = (List<User>) projectBo.findUsers(project);

        for (User myUser : listUser) {

                        System.out.println("User :"+myUser.getFirstname());

        }   
}

当我在Eclipse中运行它时,它可以工作。

但是,当我像下面那样从Web应用程序调用它时,它不起作用:

public void throwAnalyse(){

    System.out.println("->I call my function");

    try {

    String[] command= {"java","-cp", "/Users/JP/git/CleanOmicsTracer/target/CleanOmicsTracer.jar", "com.clb.genomic.lyon.external.MainExternal"};

    Process p = Runtime.getRuntime().exec(command);

    ////////////////////////////////////////////
    //test for remote command
    String line;
    BufferedReader bri = new BufferedReader(new InputStreamReader(p.getInputStream()));
    BufferedReader bre = new BufferedReader(new InputStreamReader(p.getErrorStream()));

            while ((line = bri.readLine()) != null) {
                System.out.println(line);
            }
            bri.close();

            while ((line = bre.readLine()) != null) {
                System.out.println(line);
            }
            bre.close();

     p.waitFor();

    } catch (IOException e) {  e.printStackTrace();

    } catch (InterruptedException e) {  e.printStackTrace(); }


    System.out.println("End of programme");
}

当我尝试从控制台执行为:

java -cp /Users/JP/git/CleanOmicsTracer/target/CleanOmicsTracer.jar com.clb.genomic.lyon.external.MainExternal

它不再起作用并抛出:

线程“主”中的异常java.lang.NoClassDefFoundError:org / springframework / context / ApplicationContext导致原因:java.lang.ClassNotFoundException:org.springframework.context.ApplicationContext在java.net.URLClassLoader $ 1.run(URLClassLoader.java:202 ),位于java.net.URLClassLoader.findClass(URLClassLoader.java:190)的java.security.AccessController.doPrivileged(本机方法),位于sun.misc.Launcher $的java.lang.ClassLoader.loadClass(ClassLoader.java:306)位于java.lang.ClassLoader.loadClass(ClassLoader.java:247)的AppClassLoader.loadClass(Launcher.java:301)

将Spring jar文件添加到您的类路径中。 对于主jar文件,您可以执行

java -cp /path/to/CleanOmicsTracer.jar:spring-full-1.0.1.jar com.clb.genomic.lyon.external.MainExternal

如果您有多个JAR文件,则可以使用类路径通配符

java -cp /path/to/CleanOmicsTracer.jar:lib/* com.clb.genomic.lyon.external.MainExternal

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM