gpt4 book ai didi

java - 以编程方式构建 Netbeans 平台应用程序时出现 Ant 类路径错误

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:44:23 25 4
gpt4 key购买 nike

我想从另一个 Java 应用程序(应用程序 B)运行一个 Netbeans 7.3 平台应用程序(我们将其命名为应用程序 A)。为此,在 B 的代码中,我按如下方式调用 Ant 库:

Path pathA = ... // where the A's sources are
Path fileBuild = pathA.resolve("build.xml");
Project p = new Project();
p.setUserProperty("ant.file", fileBuild.toFile().getAbsolutePath());
p.init();
ProjectHelper helper = ProjectHelper.getProjectHelper();
p.addReference("ant.projectHelper", helper);
helper.parse(p, buildFile);
p.setDefault("run");
p.executeTarget(p.getDefaultTarget());

不幸的是,我得到的错误是:

C:\Program Files\NetBeans 7.3\harness\suite.xml:184: The following error occurred while executing this line:
C:\Program Files\NetBeans 7.3\harness\common.xml:217: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "C:\Program Files (x86)\Java\jdk1.7.0_45\jre"
at org.apache.tools.ant.ProjectHelper.addLocationToBuildException(ProjectHelper.java:568)
at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:443)
at org.apache.tools.ant.taskdefs.SubAnt.execute(SubAnt.java:306)
at org.apache.tools.ant.taskdefs.SubAnt.execute(SubAnt.java:221)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:435)
at org.apache.tools.ant.Target.performTasks(Target.java:456)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
...

JAVA_HOME 变量已正确设置为系统路径变量和 netbeans 配置文件,并指向 C:\Program Files (x86)\Java\jdk1.7.0_45

问题是,我错过了什么?当从 Netbeans 菜单运行应用程序 A 时,一切运行正常,那么我应该在构建文件/ant 设置中附加什么以实现 A 从 B 的代码执行运行?

提前致谢!


编辑:我设法获得了更精确的错误堆栈,也许这会有所帮助。

Error on test cases execution.
C:\Program Files\NetBeans 7.3\harness\common.xml:217: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "C:\Program Files (x86)\Java\jdk1.7.0_45\jre"
at org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory.getCompiler(CompilerAdapterFactory.java:130)
at org.apache.tools.ant.taskdefs.Javac.findSupportedFileExtensions(Javac.java:984)
at org.apache.tools.ant.taskdefs.Javac.scanDir(Javac.java:961)
at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:932)
at org.netbeans.nbbuild.CustomJavac.execute(CustomJavac.java:105)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:435)
at org.apache.tools.ant.Target.performTasks(Target.java:456)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
at odoetest.server.ServerInvokerAnt.start(ServerInvokerAnt.java:48)
at odoetest.EntryPoint.invokeTests(EntryPoint.java:58)
at odoetest.EntryPoint.main(EntryPoint.java:38)

Edit-2:我没有任何单独的 ant 安装,而是使用 Netbeans 提供的 ant。当我运行 ant -diagnostics 时,我得到了这个 info 。当我从命令行调用构建或运行作业时,例如

ant -f /path/to/build.xml run

没有错误抛出,程序启动。我只是不能用上面的 Java 代码做完全相同的事情。

最佳答案

你的 Ant build.xml仍然指的是 JRE 而不是 JDK。

右键单击您的项目,选择 Libraries , 检查 Java Platform指向 JDK 而不是 JRE。参见 here了解详情。

如果失败:

您可以显式设置 Project p 的属性如 manouti's answer多于。这将确保 Project p以及Project A将指的是 JDK 而不是 JRE。 AFAIK,无需 fork 。

您可以在 .properties 中设置属性文件,尽管它并不总是很容易调试是否正在为每个项目实现。

您可以使用 <classpath> 在目标的类路径中显式包含文件夹/文件元素 - 请参阅 Apache Ant Manual对于一些不是很清楚的文档。

这将是:

<classpath>
<pathelement path="${path.to.jdk}"/>
</classpath>

另见 this answer .

关于java - 以编程方式构建 Netbeans 平台应用程序时出现 Ant 类路径错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28612165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com