标签: javac

如何在Borland JBuilder 2005/2006中增加javac进程的最大堆大小

在大多数现代IDE中,您可以设置一个参数,以确保javac获得足够的堆内存来进行编译.由于不值得进入的原因,我们暂时与JBuilder 2005/2006并列,看起来源代码的数量超过了javac可以处理的数量.

请保留JBuilder 2005/2006 javac的具体答案(我们现在无法迁移,Borland Make编译器不能正确支持Java 1.6)

我知道如何和什么参数应该传递给javac的,问题是IDE似乎并没有让这些在任何地方设置.很多配置都隐藏在Jbuilder Install\bin*.config文件中,我觉得答案可能在某处,但还没有找到.

jbuilder javac heap-memory

2
推荐指数
1
解决办法
8482
查看次数

如何自动编译大型Java项目?

我正在为我的雇主做一个自动化项目.我们的源代码的每个版本都有一个池.下载修订时,需要创建一个包含一堆第三方包含的目录结构,以最终构建项目.我已经将整个过程自动化,直到让我的脚本(.bat)编译每个特定的可运行java应用程序.这个单一项目有很多应用程序,目录列表如下所示:

Proj Name
   -variousincludesfolder1
   -variousincludesfolder2
   -variousincludesfolder3
   -variousincludesfolder4
   -runnableapplicationsandmoreincludes
       -con.java
Run Code Online (Sandbox Code Playgroud)

现在,我想对con.java进行自动编译,但我不知道从哪里开始.人们建议我尝试使用Ant,但是我使用Eclipse生成的任何自动化Ant文件似乎都足以在存在活动项目文件时构建con.java.反正有没有使用eclipse自动执行此操作,以至于让批处理文件生成.jar本身?

eclipse compiler-construction ant jar javac

2
推荐指数
1
解决办法
1086
查看次数

Java Generics:谁是对的,javac还是Eclipse编译?

调用此方法:

public static @Nonnull <TV, TG extends TV> Maybe<TV> something(final @Nonnull TG value) {
    return new Maybe<TV>(value);
}
Run Code Online (Sandbox Code Playgroud)

像这样:

public @Nonnull Maybe<Foo> visit() {
    return Maybe.something(new BarExtendsFoo());
}
Run Code Online (Sandbox Code Playgroud)

在Eclipse中编译得很好,但是javac给出了一个"不兼容的类型"警告:

found   : BarExtendsFoo
Run Code Online (Sandbox Code Playgroud)

要求:Foo

java eclipse compiler-construction javac

2
推荐指数
1
解决办法
1200
查看次数

编译后应用程序无法找到主类

我用两个文件制作了一个非常简单的java示例:

Dog.java包含:

package com.greg.dog;

public class Dog {
    public void bark() {
        System.out.println("bark");
    }
}
Run Code Online (Sandbox Code Playgroud)

TestDog.java包含:

package com.greg.dog;

public class TestDog {
   public static void main(String args[]) {
        Dog d = new Dog();
        d.bark();
    }
}
Run Code Online (Sandbox Code Playgroud)

我在位置〜/ Desktop/test/src/com/greg/dog中有这两个文件

当我编译它们时,Dog.java编译得很好,但是TestDog.java找不到我的Dog类:

user1@blackpearl:~/Desktop/test/src/com/greg/dog$ javac Dog.java 
user1@blackpearl:~/Desktop/test/src/com/greg/dog$ javac TestDog.java 
TestDog.java:6: cannot find symbol
symbol  : class Dog
location: class com.greg.dog.TestDog
        Dog d = new Dog();
        ^
TestDog.java:6: cannot find symbol
symbol  : class Dog
location: class com.greg.dog.TestDog
        Dog d = new Dog();
                    ^
2 …
Run Code Online (Sandbox Code Playgroud)

java javac package

2
推荐指数
1
解决办法
1140
查看次数

为什么javac重新编译我的.java虽然.class已经更新了?

我被告知它javac足够聪明,它不会重新编译.java,因为它.java有一个时间戳之前的时间戳.class.我发现它在我的机器中不能像那样工作,我在某处肯定是错的吗?

P.java位于.../eg/access,P.java声明为一个访问包

eg 
 |- access 
      |- P.class
      |- P.java
Run Code Online (Sandbox Code Playgroud)

然后,当我运行时javac P.java,每次重新编译,是正常还是我错了?

java javac recompile

2
推荐指数
2
解决办法
1954
查看次数

ActionBarSherlock有很多错误

这是我第一次使用外部库,我对删除所有错误感到有些紧张.添加库时,我会使用相同的修复程序"删除@Override注释"给出一大堆错误.

解决此问题的方法是将JDK增加到1.6:ActionBarSherlock库在导入后会出现错误

但现在我担心我的其他应用程序......我是否以错误的方式编译它们?另外,我有1.7的JDK可用,我应该使用它而不是1.6吗?对不起,我真的不知道区别.

java android javac

2
推荐指数
1
解决办法
643
查看次数

javap -c对类文件的作用是什么?

实际上,这个问题有点宽泛.我知道javac将java文件编译成字节码,一个类文件.因此,类文件应该包含jvm指令和所有这些.另一方面,查看这些指令的唯一方法是使用javap -c反编译类文件.但它不是反编译,对吧?因为如果它是反编译,它会产生java文件.所以,我的猜测是javac编译java文件2次(实际上并不是真的,但为了简单起见,我们假设),首先是jvm指令,然后是字节码,所以javap -c从字节码反编译为jvm指令.Jvm应该理解字节码,因此它无法理解指令.我在这里有点困惑.有人能解释一下这里发生了什么吗?

java javac javap

2
推荐指数
1
解决办法
784
查看次数

Diamond操作符(<>)在java 1.7中不起作用

编译jsp文件时出现以下错误:

源级别低于1.7的"<>"运算符不允许

我正在使用jdk 1.7.x和eclipse Kepler我1.7 as compliance level也在Eclipse中设置了项目首选项,但代码仍无效

我应该添加任何其他配置吗?

java eclipse jsp javac

2
推荐指数
1
解决办法
7768
查看次数

为什么编译器没有发现ConcurrentModificationException的某些原因

很明显,这段代码在迭代期间修改了一个列表.

public class ArrayIterator {

    public static void main(String[] args) {

        List<String> list = new LinkedList<>(Arrays.asList("A","B","C","D","E"));

        Iterator<String> it = list.iterator();
        while (it.hasNext())
        {
            list.remove(it.next());
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

所以我们得到了预期的例外

Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:966)
    at java.util.LinkedList$ListItr.next(LinkedList.java:888)
    at ArrayIterator.main(ArrayIterator.java:15)
Run Code Online (Sandbox Code Playgroud)

为什么编译器不能对此发出警告?

java iterator javac

2
推荐指数
1
解决办法
208
查看次数

当ECJ没有时,为什么javac需要引用类的接口?

在编译a时Client,它使用一些接口I(例如O)的实现,类文件I也必须存在于类路径中.奇怪的是,这只是一个例子javac,因为Eclipse编译器(ECJ)不需要I编译.

是什么让JDK 需要超类型进行编译,ECJ编译得很好?

它不是默认方法,如错误报告中所评论的那样,兼容性指南也同意:

在针对另一个实现在另一个类文件中定义的接口的类编译类时,这样的类文件(其中定义了接口)必须在编译期间由javac使用的类路径中可用.这是JDK 8的新要求 - 如果不这样做将导致编译错误.


更新:

  • 类似的问题:Java 8接口/类加载器的变化?
  • 无论I.doit()default简单的抽象方法都没关系,行为是一样的
  • 无论是否I.doit()被覆盖,当然都很重要O; 如果没有覆盖,那么ECJ也会达到I定义doit()

接口(api/a/I.java):

package a;
public interface I {
    default void doit() {
        System.out.println("In I");
    }
}
Run Code Online (Sandbox Code Playgroud)

实施(impl/b/O.java):

package b;
public class O implements a.I {
    public void doit() {
        System.out.println("In O"); …
Run Code Online (Sandbox Code Playgroud)

java javac java-8 ecj

2
推荐指数
1
解决办法
334
查看次数