我正在使用javac编译器来编译项目中的java文件.这些文件分布在几个包像这样:com.vistas.util,com.vistas.converter,com.vistas.LineHelper,com.current.mdcontect.
每个包都有几个java文件.我正在使用这样的javac:
javac com/vistas/util/*.java com/vistas/converter/*.java
com.vistas.LineHelper/*.java com/current/mdcontect/*.java
Run Code Online (Sandbox Code Playgroud)
(在一行)
而不是提供这么多路径,我怎么能要求编译器递归编译来自父com目录的所有java文件?
我使用命令在我的CentOS版本5.5机器上安装了java yum install java.但我无法使用javac编译类.
我需要安装任何其他包吗?
我试图找到javac可执行文件,但我无法找到它.
/usr/bin/java链接如下:
/usr/bin/java- > /etc/alternatives/java
/etc/alternatives/java- >/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
我看过以下输出yum list installed |grep java:
java-1.6.0-openjdk.x86_64 1:1.6.0.0-1.16.b17.el5 installed
tzdata-java.x86_64 2011b-1.el5 installed
Run Code Online (Sandbox Code Playgroud) 编译我的java程序时出现此错误:
error: Class names, 'EnumDevices', are only accepted if annotation
processing is explicitly requested
1 error
Run Code Online (Sandbox Code Playgroud)
这是java代码(我在Ubuntu上运行它).
import jcuda.CUDA;
import jcuda.driver.CUdevprop;
import jcuda.driver.types.CUdevice;
public class EnumDevices {
public static void main(String args[]) {
CUDA cuda = new CUDA(true);
int count = cuda.getDeviceCount();
System.out.println("Total number of devices: " + count);
for (int i = 0; i < count; i++) {
CUdevice dev = cuda.getDevice(i);
String name = cuda.getDeviceName(dev);
System.out.println("Name: " + name);
int version[] = cuda.getDeviceComputeCapability(dev);
System.out.println("Version: " +
String.format("%d.%d", version[0], …Run Code Online (Sandbox Code Playgroud) 使用相同的JDK(即相同的javac可执行文件)时,生成的类文件是否始终相同?可能会有所不同,具体取决于操作系统或硬件?除JDK版本外,是否还有其他因素导致差异?是否有任何编译器选项可以避免差异?仅在理论上可能存在差异,或者Oracle是否javac实际为相同的输入和编译器选项生成不同的类文件?
更新1我对生成感兴趣,即编译器输出,而不是类文件是否可以在各种平台上运行.
更新2通过'相同的JDK',我也意味着相同的javac可执行文件.
更新3 Oracle编译器中理论差异与实际差异的区别.
[编辑,添加释义问题]
"在不同的平台上运行相同的javac可执行文件会产生不同的字节码的情况是什么?"
用例很简单.我得到了使用Eclipse创建的源文件.因此,有一个深层目录结构,任何Java类都可以引用同一个子,兄弟或父文件夹中的另一个Java类.
如何使用javac从终端编译整个东西?
我要做一个丑陋的临时黑客,以便在我们等待修复外部资源时解决阻塞问题.除了用一个可怕的评论和一堆FIXME来标记它之外,我很乐意让编译器抛出明显的警告信息作为提示,所以我们不要忘记把它拿出来.例如,类似于:
[javac] com.foo.Hacky.java:192: warning: FIXME temporary hack to work around library bug, remove me when library is fixed!
Run Code Online (Sandbox Code Playgroud)
有没有办法可以使用我选择的消息引起有意的编译器警告?如果做不到这一点,最简单的事情是添加到代码中以抛出现有警告,可能在违规行的字符串中有一条消息,以便在警告消息中打印出来?
编辑:不推荐的标签似乎没有为我做任何事情:
/**
* @deprecated "Temporary hack to work around remote server quirks"
*/
@Deprecated
private void doSomeHackyStuff() { ... }
Run Code Online (Sandbox Code Playgroud)
在eclipse或sun javac 1.6(从ant脚本运行)中没有编译器或运行时错误,它肯定正在执行该函数.
当我尝试生成一个war文件时,它会显示一些错误
[ERROR] Unable to locate the Javac Compiler in:
[ERROR] C:\Program Files\Java\jre7\..\lib\tools.jar
Run Code Online (Sandbox Code Playgroud)
当我这样做echo %path%时显示
C:\Windows\System32;D:\name\name1\Softwares\Maven\apache-maven-3.0.4\b
in;C:\Program Files\Notepad++\;%JDK_HOME%
Run Code Online (Sandbox Code Playgroud)
当我做 echo %JDK_HOME%
D:\name\name\core java\software\Java\Java_1.6.0_04_win\jdk1.6.0_04\bin
Run Code Online (Sandbox Code Playgroud)
当我的环境变量是jdk时,我不知道为什么maven会引用jre.我还将已安装的JRE更改为jdk1.6.
我需要使用ant(1.7.0)编译一个jar文件,以在特定版本的Java(1.5)下运行.我目前在我的机器上安装了Java 1.6.我试过设置:
<target name="compile">
<javac compiler="javac1.5" target="1.5" srcdir=.../>
</target>
Run Code Online (Sandbox Code Playgroud)
我也删除了
<property name="build.compiler" value="modern"/>
Run Code Online (Sandbox Code Playgroud)
并且没有属性文件.我在Linux/SUSE上运行Java 1.6
还有一种简单的方法可以确定jar文件中预期的Java版本.
最近,我正在读这篇文章.
根据那篇文章,Java Compiler即javac在生成字节码时不执行任何优化.这是真的吗?如果是这样,那么它可以作为中间代码生成器实现,以消除冗余并生成最佳代码吗?
Java 9 javac有一个新的标志--release:
> javac --help
...
--release <release>
Compile for a specific VM version. Supported targets: 6, 7, 8, 9
Run Code Online (Sandbox Code Playgroud)
它-source与-target旗帜有什么不同?它只是一个捷径-source X -target X吗?