标签: javac

如何在不同的目录中编译和运行Java类?

我正在编写一个makefile,它编译一个.java不同目录中的文件,然后我想运行它,而不更改目录.我想做一些事情:

$(SQM_JAVA_TOOL_DONE) : $(SQM_JAVA_TOOL)
        $(shell cd /home_dir)
        javac myjavafile.java
        java myjavafile
Run Code Online (Sandbox Code Playgroud)

Java文件所在的位置/home/myjavafile.java,并且未运行makefile /home.

我怎样才能做到这一点?

java javac

30
推荐指数
2
解决办法
6万
查看次数

无法在Ubuntu上运行javac

我正在尝试在Ubuntu终端上运行javac.但我得到以下内容:

 $ javac
 The program 'javac' can be found in the following packages:
 * openjdk-6-jdk
 * ecj
 * gcj-4.4-jdk
 * gcj-4.6-jdk
 * gcj-4.5-jdk
 * openjdk-7-jdk
 Try: sudo apt-get install <selected package>
Run Code Online (Sandbox Code Playgroud)

jdk已经安装并正在运行sudo apt-get install openjdk-6-jdk0 upgraded, 0 newly installed, 0 to remove and 322 not upgraded.

我的jdk安装在/ usr/lib/jvm/java-6-open-jdk中; 我能够从eclipse编译并运行一个java程序.但是在使用终端时我遇到了这个前面提到的问题.

java ubuntu javac

29
推荐指数
1
解决办法
6万
查看次数

从命令行在包中运行java

我已阅读以前发布的问题.有些是模糊的,没有一个解决我的问题,所以我不得不再问.

我有两个简单的课程,

package One;
import One.Inner.MyFrame;
public class test
{
    public static void main(String args[])
    {
        MyFrame f= new MyFrame();
    }
}
Run Code Online (Sandbox Code Playgroud)

而另一类是,

package One.Inner;
import java.awt.*;
import javax.swing.*;

public class MyFrame extends JFrame
{
    public MyFrame()
    {
        setPreferredSize(new Dimension(400,560));
        setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

我在Windows cmd中的基本文件夹"基本".我编译使用

basic> javac *.java -d .
Run Code Online (Sandbox Code Playgroud)

创建文件夹和子文件夹.

cd One
basic\One> java test
Run Code Online (Sandbox Code Playgroud)

这会产生一大堆错误.许多答案旨在指定不起作用的完整路径.我的类在One中,因此指定一个使用-cp也不起作用.

java command-line javac classpath package

29
推荐指数
3
解决办法
8万
查看次数

如何编译编码为"UTF-8"的java源文件?

我保存了我的Java源文件,将其编码类型指定为UTF-8(使用记事本,默认情况下,记事本的编码类型为ANSI),然后我尝试使用以下命令编译它:

javac -encoding "UTF-8" One.java
Run Code Online (Sandbox Code Playgroud)

但它给出了一条错误消息"

One.java:1: illegal character: \65279

?public class One {

^
1 error
Run Code Online (Sandbox Code Playgroud)

还有其他方法,我可以编译吗?

这是来源:

public class One {
    public static void main( String[] args ){
        System.out.println("HI");
    }
} 
Run Code Online (Sandbox Code Playgroud)

java unicode compiler-errors javac

28
推荐指数
5
解决办法
7万
查看次数

Ant:将compilerarg传递给javac

我有编写的ant脚本:

            <javac srcdir="${test.src.dir}" destdir="${test.dist.dir}">
               ...  
               <compilerarg value="-Xlint:unchecked" />
            </javac>
Run Code Online (Sandbox Code Playgroud)

我需要增加编译器的堆内存,所以我将以下参数放入compileargs:

<compilerarg value="-Xlint:unchecked -Xms128m -Xmx512m" />
Run Code Online (Sandbox Code Playgroud)

但我在控制台中收到错误:

[javac] javac: invalid flag: -Xms128m
[javac] Usage: javac <options> <source files>
Run Code Online (Sandbox Code Playgroud)

为什么会这样?如何增加使用的内存javac

java memory ant heap javac

28
推荐指数
2
解决办法
5万
查看次数

我应该使用javac -O选项进行优化吗?

javac 一个有趣的-O选择:

通过内联静态,最终和私有方法来优化编译代码.请注意,您的课程可能会变得更大.

这个选项似乎不受欢迎(隐藏?),我今天刚刚在CodeCup 2014页面上发现它.

-O中未提及的官方文件,也不在man javac......奇怪.

在对类似问题的接受答案中,我们可以读到:

Java中的优化主要由JIT编译器在运行时完成.因此,没有必要尝试指示它在编译时优化某种方式(无论如何它只创建字节码).JIT几乎肯定会在现场做出更好的决策,了解确切的环境并观察代码特定部分的实际执行模式.

我的问题是:

我应该总是使用该-O选项吗?换句话说,代码总是运行得更快-O或根本没有差别?

也许班级规模会增加太多,整体表现会下降?或者JVM无论如何都会进行内联,所以最好留下它?

类似的故事gcc -O3国旗.

java compiler-construction optimization javac

28
推荐指数
3
解决办法
3803
查看次数

JDK/JRE/JVM/Java SDK | 这些都意味着什么?有时您可以使用JRE进行开发,有时您需要JDK?

说实话,我对所有这些术语都非常困惑(JDK/JRE/Java SDK).我不确定每个人做了什么.

当我第一次在eclipse中开始做简单的java示例时,我很确定我只有JRE,我认为这是普通用户能够在其系统上运行java程序/ applet的默认java安装程序.

但是,现在在课堂上我们正在使用Google Appengine,这需要我猜的JDK与Java SDK相同.在浪费一些时间发现安装JDK意味着我还必须将java/bin添加到环境变量以使javac -version在命令提示符下工作我发现只有JDK有javac ...

我的早期java程序如何在没有安装JDK的情况下工作,因此没有javac?而且真正的主要问题是...... JRE和JDK之间有什么区别,你什么时候使用它们?

谢谢 :)

java eclipse javac

27
推荐指数
2
解决办法
3万
查看次数

在优化过程中Java内联方法会不会?

我想知道JVM/javac是否足够聪明

// This line...
string a = foo();

string foo()
{
  return bar();
}

string bar()
{
  return some-complicated-string computation;
}
Run Code Online (Sandbox Code Playgroud)

string a = bar();
Run Code Online (Sandbox Code Playgroud)

或者在发布案例中删除对foo()的不必要调用(因为无法访问的代码):

string a = foo(bar());

// bar is the same
...

string foo(string b)
{
  if (debug) do-something-with(b);
}
Run Code Online (Sandbox Code Playgroud)

对于第一个例子我的感觉是肯定的,对于第二个例子我的感觉是"不太确定",但是有人可以给我一些指示/链接来确认吗?

java optimization jvm javac

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

使用javac在一个包中编译四个java文件

我的文件夹中有四个java文件.它们都在同一个包装中.这是包装声明
package com.osama.GHide

所有这些类都在同一个包中.我想知道如何使用它编译它们javac(我的意思是我不知道如何编译彼此使用的多个文件).一旦完成,我如何java在CLI中使用命令启动?这是文件名.
EnteringPoint.java HidingProcess.java ListFiles.java

java command-line javac

27
推荐指数
1
解决办法
9万
查看次数

为什么java编译上的并行执行会在时间上呈线性增长

time javac Main.java                                      --> 0m1.050s
time javac Main.java & javac Main.java                    --> 0m1.808s
time javac Main.java & javac Main.java & javac Main.java  --> 0m2.690s
time javac Main.java & ... 8 time                         --> 0m8.309s
Run Code Online (Sandbox Code Playgroud)

当我们javac并行运行命令并且每次增加javac命令时~1 sec都会添加所有javac命令来完成.

为什么线性增长是时间?

javac运行过程中的所有过程都涉及某种类型locks,如果是,如何克服它以便不会在时间上有线性增长


PS:上面我已经试过上single core machine,double core machine,4 core machine都表现出相同的行为.

PS2:环境RedHat7,javac 1.7.0_79

java linux cpu javac linux-kernel

27
推荐指数
1
解决办法
2481
查看次数