java - 使用ant和自定义build.xml进行编译时出错,但在netbeans中工作

标签 java netbeans ant

我在这里有一个奇怪的问题,我无法全神贯注。代码如下-它确实是一个存根,什么也不会发生,但是它对于说明问题的必要性最小:

package playground;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MenuDetectEvent;
import org.eclipse.swt.events.MenuDetectListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

/**
 *
 * @author k
 */
public class ButtonTest {
    public static void main(String[] args) {
        Display d = new Display();
        Shell s = new Shell(d);
        Button b = new Button(s, SWT.PUSH);

        b.addSelectionListener(new SelectionListener() {
            @Override
            public void widgetSelected(SelectionEvent se) {
                throw new UnsupportedOperationException("Not supported yet.");
            }

            @Override
            public void widgetDefaultSelected(SelectionEvent se) {
                throw new UnsupportedOperationException("Not supported yet.");
            }
        });

        b.addMenuDetectListener(new MenuDetectListener() {
            @Override
            public void menuDetected(MenuDetectEvent mde) {
                throw new UnsupportedOperationException("Not supported yet."); 
            }
        });
    }
}


代码在netbeans中运行,构建为OK。当将ant与自定义build.xml一起使用时,构建会抱怨无法找到符号b。我的构建文件是

<project name="Test" default="compile" basedir=".">
        <target name="compile">
                <mkdir dir="build" />
                <javac srcdir="src" destdir="build" debug="on">
                        <classpath>
                                <fileset dir="/home/k/lab/ccagent/lib">
                                        <include name="*.jar" />
                                </fileset>
                        </classpath>
                </javac>
        </target>
</project>


并调用ant会导致

Buildfile: /home/k/NetBeansProjects/Playground/build.xml

compile:
    [javac] /home/k/NetBeansProjects/Playground/build.xml:4: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
    [javac] Compiling 5 source files to /home/k/NetBeansProjects/Playground/build
    [javac] /home/k/NetBeansProjects/Playground/src/playground/ButtonTest.java:34: error: cannot find symbol
    [javac]             b.addMenuDetectListener(new MenuDetectListener() {
    [javac]              ^
    [javac]   symbol:   method addMenuDetectListener(<anonymous MenuDetectListener>)
    [javac]   location: variable b of type Button
    [javac] 1 error

BUILD FAILED


让我真正困惑的是:错误发生在b.addMenuDetectListener(…)处,而不是发生在b.addSelectionListener(…)处。由于Netbeans可以毫无疑问地编译和运行代码,所以我想知道build.xml中是否有错误?用netbeans创建的build.xml调用ant的编译也没有错误。

因此,这里有两个问题:


为什么编译器在b.addMenuDetectListener而不是b.addSelectionListener抱怨?
为什么我的build.xml失败了,但是Netbean的失败了?

最佳答案

@roberts提示正在解决问题:在swt中引用的lib目录中有一个旧的build.xml版本。尽管netbeans似乎包含特定版本,但在我的build.xml中给出的路径导致加载了找到的第一个swt版本,该版本是3.1,而该版本不提供addMenuDetectListener

因此,不是b是罪魁祸首,而是在旧的swt版本中丢失了。

关于java - 使用ant和自定义build.xml进行编译时出错,但在netbeans中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58138736/

相关文章:

java - 为什么我不能在 NetBeans Debugger 中单步执行 Java 源代码?

java - 将 wicket CompoundPropertyModel 与抽象类一起使用

java - 简单的Java显示图像

java - 延迟执行服务

ANT:加载文件名并从文件名中提取数据

java - Maven 可以做我们在这个 ANT build.xml 中所做的事情吗

android - 使用类加载器 AntClassLoader[] 找不到 taskdef 类 proguard.ant.ProGuardTask

java - double 值的乘法会产生意外的行为吗?

java - Netbeans 设计 View 中的动态按钮

Java Netbeans : How to layer panels on top of each other?