在IntelliJ Community Edition上构建的Ant没有显示编译器错误

时间:2012-11-14 16:40:55

标签: ant intellij-idea

我想在Ubuntu 12.04.1 LTS上运行的IntelliJ Community Edition 11.1.4中构建一个现有项目

在Ant Build窗口中,我通过单击窗口左上角的 + 按钮并导航到该文件,添加了项目的build.xml。列出了与构建文件关联的ant任务,然后单击绿色播放按钮以运行按预期开始的ant构建。

我原本期望看到编译器错误并让IntelliJ CE显示那些编译器错误并允许我跳转到(违规)Source双击了Messages窗口中的错误。

相反,消息窗口显示以下错误,当我双击它时,我将转到javac文件中的build.xml ant任务。

build.xml:389: Compile failed; see the compiler error output for details.

这是一个很好的建议,我非常想遵循它,但我不能,因为编译器错误没有显示在消息窗口的任何地方。下一个和上一个消息不会导航到实际的编译器错误。

我想知道如何在运行Ant构建的IntelliJ中看到编译器错误消息。

我尝试将-v标志添加到Execution Properties中的Ant命令行:field。这对行为没有任何影响。

然后我尝试了从Ant 1.8到Ant 1.7的评分。这次我确实看到了行为的变化。构建根本不运行,我在终端遇到以下错误https://gist.github.com/4073149

javac ant任务看起来像这样。

<target name="compile-only" depends="">
    <stopwatch name="Compilation"/>
<javac destdir="${build.classes.dir}" debug="on" deprecation="off" 
       classpathref="base.path" excludes="/filtering/**/**">
    <src path="${src.dir}"/>
    <src path="${build.autogen.dir}"/>
</javac>
<!-- Copy all resource files to the output dir -->
<copy todir="${build.classes.dir}">
    <fileset dir="${src.dir}">
        <include name="**/*.properties"/>
        <include name="**/*.gif"/>
        <include name="**/*.png"/>
        <include name="**/*.jpg"/>
        <include name="**/*.svg"/>
        <include name="**/*.jpeg"/>
        <exclude name="**/.svn"/>
    </fileset>
</copy>
<stopwatch name="Compilation" action="total"/>

3 个答案:

答案 0 :(得分:24)

IDEA只打印Ant的输出。尝试使用消息面板左侧的相应按钮将输出从树视图切换到纯文本视图:

Plain Text View

如果输出包含错误,您应该可以在那里看到它们。

使用IDEA提供的渐进式编译(Build | Make)也更快更容易。

答案 1 :(得分:1)

使用普通(非树)输出用于蚂蚁IntelliJ使用 javac错误的file (line,col): error msg格式。 但错误视图解析器只能理解file:line: error msg格式。

您可以在antIntegration.jar的PlainTextView类中调整它 http://grepcode.com/file/repository.grepcode.com/java/ext/com.jetbrains/intellij-idea/10.0/com/intellij/lang/ant/config/execution/PlainTextView.java#98

我刚刚将addJavacMessage方法更改为关注并重新编译该类 ```java

 public void addJavacMessage(AntMessage message, String url) {
    final VirtualFile file = message.getFile();
    if (message.getLine() > 0) {
      final StringBuilder builder = StringBuilderSpinAllocator.alloc();
      try {

        if (file != null) {
          ApplicationManager.getApplication().runReadAction(new Runnable() {
            public void run() {
              String presentableUrl = file.getPresentableUrl();
              builder.append(presentableUrl);
//              builder.append(' ');
            }
          });
        }
        else if (url != null) {
          builder.append(url);
//          builder.append(' ');
        }
//        builder.append('(');
        builder.append(':');
        builder.append(message.getLine());
        builder.append(':');
        builder.append(' ');
//        builder.append(message.getColumn());
//        builder.append(")");
        print(builder.toString(), ProcessOutputTypes.STDOUT);
      }
      finally {
        StringBuilderSpinAllocator.dispose(builder);
      }
    }
    print(message.getText(), ProcessOutputTypes.STDOUT);
  }

  public void addException(AntMessage exception, boolean showFullTrace) {
    String text = exception.getText();
    showFullTrace = false;
    if (!showFullTrace) {
      int index = text.indexOf("\r\n");
      if (index != -1) {
        text = text.substring(0, index) + "\n";
      }
    }
    print(text, ProcessOutputTypes.STDOUT);
  }

```

现在我在“纯文本”中有可点击的链接&#39;蚂蚁工具的输出模式。 请注意,那种树模式&#39;显示线和&amp;列正确 - 我使用了IDEA 13 CE。

如果有人为此问题创建针对Intellij的拉取请求,那将会很好。

答案 2 :(得分:1)

在IntelliJ中正确使用蚂蚁:

javac includeantruntime="false" srcdir="${src.dir}" fork="yes" executable="D:/jdk1.7/bin/javac"
      destdir="${classes.dir}" includes="**/*.java" source="7" classpathref="library.classpath" ...

最重要的:

executable="D:/jdk1.7/bin/javac"