动态编译如何设定classpath?

moon_pang 2006-11-06 02:54:17
需要动态编译的代码中import了第三方的jar
执行javac.compile(String[])方法时报“软件包 org.apache.axis.description 不存在”
但是此jar包已经在工程中被导入了
请教各位,如何使动态编译使用当前的运行环境的classpath呢?
...全文
426 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
moon_pang 2006-11-09
  • 打赏
  • 举报
回复
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
dunne 2006-11-08
  • 打赏
  • 举报
回复
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);
dunne 2006-11-08
  • 打赏
  • 举报
回复
搂主,你是不是写错了
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) {
//编译发生错误!!
}
moon_pang 2006-11-07
  • 打赏
  • 举报
回复
第三方的类库在我的工程代码中放在了lib目录下

打出的plugin的jar包中,第三方类库也打入了lib目录下

在MANIFEST中的Bundle-ClassPath里,用到的jar文件也都写了相对路径(包括lib/tools.jar和lib/MyJar.jar)

不知为什么就是不行啊
zxcwillzxc 2006-11-06
  • 打赏
  • 举报
回复
在MANIFEST文件中加入属性
Class-Path:为相对路径的类库(.jar)位置,用空格分离

注:第三方类库不在你自己打包里的情况下
moon_pang 2006-11-06
  • 打赏
  • 举报
回复
那个,我没QQ的,不好意思
千里冰封820 2006-11-06
  • 打赏
  • 举报
回复
帮楼主顶一下
angelleecash 2006-11-06
  • 打赏
  • 举报
回复
我的QQ :
308720472
讨论一下
angelleecash 2006-11-06
  • 打赏
  • 举报
回复
确认MANIFEST中的Class-Path: 属性没有写错?我在我的机器上面写了一个例子正确运行的
moon_pang 2006-11-06
  • 打赏
  • 举报
回复
谢谢楼上诸位

我的tools.jar是打到了插件的jar包中的

我现在的问题不是无法调用compile的方法

而是在我自动生成的代码中调用了第三方的jar包

虽然这个第三方的jar包也被我打入了插件的jar文件中

但是在动态编译的过程中并未找到这个第三方的jar及里面的类

所以对自动生成的代码编译不成功,报“软件包不存在”的错误
angelleecash 2006-11-06
  • 打赏
  • 举报
回复
我试过了,我的解决办法是把tools.jar打进JAR包,因为实际你的运行环境中这个包不一定包含,你要确定你的程序可以运行,就必须提供运行需要的环境
zhuixun5506 2006-11-06
  • 打赏
  • 举报
回复
java.lang.Rundime().exec(“SET CLASSPATH=%CLASSPATH%;C:\MyJar.jar”); 不知能行不,没用过,
moon_pang 2006-11-06
  • 打赏
  • 举报
回复
不是现有代码
而是由程序自动生成的代码
通过调用“import com.sun.tools.javac.Main”类的compile方法进行动态编译
angelleecash 2006-11-06
  • 打赏
  • 举报
回复
不知道楼主的所谓动态编译指的是什么,你要在程序的运行环境中重新编译现有的代码吗?
moon_pang 2006-11-06
  • 打赏
  • 举报
回复
1.我是eclipse插件中动态生成的代码,需要进行动态编译,所以不被允许去设定系统的classpath

2.怎么在动态编译中执行“SET CLASSPATH=%CLASSPATH%;C:\MyJar.jar”?

我知道可以在javac.compile()中可以传入classpath,但需要制定位置,而我只想将运行环境的classpath传给动态编译器,怎么做?
lianhg 2006-11-06
  • 打赏
  • 举报
回复
SET CLASSPATH=%CLASSPATH%;C:\MyJar.jar
graybaby 2006-11-06
  • 打赏
  • 举报
回复
在系统环境变量的classpath中添加第三方的jar文件

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧