需要动态编译的代码中import了第三方的jar
执行javac.compile(String[])方法时报“软件包 org.apache.axis.description 不存在”
但是此jar包已经在工程中被导入了
请教各位,如何使动态编译使用当前的运行环境的classpath呢?

解决方案 »

  1.   

    在系统环境变量的classpath中添加第三方的jar文件
      

  2.   

    SET CLASSPATH=%CLASSPATH%;C:\MyJar.jar
      

  3.   

    1.我是eclipse插件中动态生成的代码,需要进行动态编译,所以不被允许去设定系统的classpath2.怎么在动态编译中执行“SET CLASSPATH=%CLASSPATH%;C:\MyJar.jar”?我知道可以在javac.compile()中可以传入classpath,但需要制定位置,而我只想将运行环境的classpath传给动态编译器,怎么做?
      

  4.   

    不是现有代码
    而是由程序自动生成的代码
    通过调用“import com.sun.tools.javac.Main”类的compile方法进行动态编译
      

  5.   

    java.lang.Rundime().exec(“SET CLASSPATH=%CLASSPATH%;C:\MyJar.jar”); 不知能行不,没用过,
      

  6.   

    我试过了,我的解决办法是把tools.jar打进JAR包,因为实际你的运行环境中这个包不一定包含,你要确定你的程序可以运行,就必须提供运行需要的环境
      

  7.   

    谢谢楼上诸位我的tools.jar是打到了插件的jar包中的我现在的问题不是无法调用compile的方法而是在我自动生成的代码中调用了第三方的jar包虽然这个第三方的jar包也被我打入了插件的jar文件中但是在动态编译的过程中并未找到这个第三方的jar及里面的类所以对自动生成的代码编译不成功,报“软件包不存在”的错误
      

  8.   

    确认MANIFEST中的Class-Path: 属性没有写错?我在我的机器上面写了一个例子正确运行的
      

  9.   

    在MANIFEST文件中加入属性
    Class-Path:为相对路径的类库(.jar)位置,用空格分离注:第三方类库不在你自己打包里的情况下
      

  10.   

    第三方的类库在我的工程代码中放在了lib目录下打出的plugin的jar包中,第三方类库也打入了lib目录下在MANIFEST中的Bundle-ClassPath里,用到的jar文件也都写了相对路径(包括lib/tools.jar和lib/MyJar.jar)不知为什么就是不行啊
      

  11.   

    搂主,你是不是写错了
    javac.compile
    有这个方法吗?只有
    com.sun.tools.javac.Main.compile(String[])
    这个方法StringBuilder classPath = new StringBuilder();
    //定义编译时的路径
    classPath.append("c:\\myclasss");
    //定义编译时的lib
    classPath.append(java.io.File.pathSeparatorChar).append("c:\\abc.jar");
    //需要编译的java文件
    File javaFile = new javaFile("c:\\Test.java");
    //开始编译
    String args[] = {"-cp", classPath.toString(), javaFile.getAbsolutePath()};
    int rs = com.sun.tools.javac.Main.compile(args);
    if (rs != 0) {
      //编译发生错误!!
    }
      

  12.   

    com.sun.tools.javac.Main.compile(String[] args)
    这里的args和手动执行javac的参数是一样的
    例如:
    javac -encoding GBK -classpath "c:\\myclass;c:\\abc.jar" Test.java
    就等于
    String args[] = {"-encoding", "GBK", "-classpath", "c:\\myclass;c:\\abc.jar", "Test.java"};
    com.sun.tools.javac.Main.compile(args);
      

  13.   

    To dunne:
    直接把调用方法的代码copy过来了
    忘了前边定义的一句
    com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main()具体的情况写在下边的帖子里了,包括被编译的文件、编译的代码等等,麻烦大家帮忙看一下
    http://community.csdn.net/Expert/topic/5140/5140236.xml?temp=.8748133