问题标签 [javacompiler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
205 浏览

java - 将 Java 编译器级别 1.6 更改为 1.7 是否需要部署所有类?

我在eclipse Luna中有 java web 项目。编译器级别为“ 1.6 ”。

我需要一些 1.7 的功能,所以我将级别更改为“ 1.7 ”和项目中的 java 代码。没有编译错误。

现在,我将部署我的代码。我的问题是;

仅将更改的类部署到生产环境是否安全?还是我必须部署所有类?

PS:生产服务器 JRE 级别已经是 1.7。

问候。

0 投票
1 回答
1823 浏览

java - Java for 循环优化

我用 java for 循环做了一些运行时测试,发现了一个奇怪的行为。对于我的代码,我需要原始类型(如 int、double 等)的包装器对象,以模拟 io 和输出参数,但这不是重点。只要看我的代码。具有字段访问权限的对象如何比原始类型更快?

for具有原始类型的循环:

结果:

MicroTime 原语(最大值:=10000.0):110
MicroTime 原语(最大值:=100000.0):1081
MicroTime 原语(最大值:=1000000.0):2450
MicroTime 原语(最大值:=1.0E7):28248
MicroTime 原语(最大值:=1.0E8) :276205
MicroTime 原语(最大值:=1.0E9):2729824
MicroTime 原语(最大值:=1.0E10):27547009

for简单类型的循环(包装对象):

结果:

MicroTime 封装器(最大值:=10000.0):157
MicroTime 封装器(最大值:=100000.0):1561
MicroTime 封装器(最大值:=1000000.0):3174
MicroTime 封装器(最大值:=1.0E7):15630
MicroTime 封装器(最大值:=1.0E8) :155471
MicroTime 包装器(最大值:=1.0E9):1520967
MicroTime 包装器(最大值:=1.0E10):15373311

迭代次数越多,第二个代码就越快。但为什么?我知道 java-compiler 和 jvm 正在优化我的代码,但我从没想过原始类型会比具有字段访问权限的对象慢。
有人对此有合理的解释吗?

编辑:HDouble 类:

我还用其中的代码测试了我的循环。例如,我计算总和 - > 相同的行为(差异不是那么大,但我认为原始算法必须快得多?)。首先我想,计算需要很长时间,字段访问几乎没有区别。

包装器 for 循环:

结果:

MicroTime 封装(最大值:=10000.0):243
MicroTime 封装(最大值:=100000.0):2805
MicroTime 封装(最大值:=1000000.0):3409
MicroTime 封装(最大值:=1.0E7):28104
MicroTime 封装(最大值:=1.0E8) :278432
MicroTime 包装器(最大值:=1.0E9):2678322
MicroTime 包装器(最大值:=1.0E10):26665540

原始 for 循环:

结果:

MicroTime 原语(最大值:=10000.0):149
MicroTime 原语(最大值:=100000.0):1996
MicroTime 原语(最大值:=1000000.0):2289
MicroTime 原语(最大值:=1.0E7):27085
MicroTime 原语(最大值:=1.0E8) :
279939 MicroTime 原语(最大值:=1.0E9):2759133
MicroTime 原语(最大值:=1.0E10):27369724

0 投票
1 回答
322 浏览

java - SimpleJavaFileObject 如何导入自定义(由我创建)包?

我是第一次来,所以...

该任务在编译动态类(从字符串创建)和随后创建实例化中。

问题在于将放置在不同文件夹中的自定义包/类导入动态类。例如:import controller.*;发生错误后:

但是标准包(库)已经很好地导入,没有任何问题,编译也以同样的方式结束。

我试图通过 JavaCompiler Api 的 getTask 方法通过发送带有路径的 optionList 来解决,但没有成功。

那么如何正确导入自定义包呢?

这是我的代码:

提前致谢!

0 投票
2 回答
320 浏览

java - JavaCompiler 在创建依赖类时出错

我编写了一个生成两个类的代码,我将它们写入缓冲区并使用 JavaCompiler 编译它们。我的类在 .java 文件中是这样的;

像这样的东西。

但是,类的名称是随机生成的,当我创建文件时,它会出现这样的错误;

./src/A.java:4: error: cannot find symbol

(第 4 行是“...extends ArrayList...”,并且 A 下有一个 ^ 符号)

我的代码生成器是这样编译的;

首先,我用我的 A 类型类模板填充缓冲区,然后像这样编译:

之后,我创建另一个缓冲区并用我的 B 类型类模板填充它,然后像这样编译;

f 是;

我怎么解决这个问题?

0 投票
1 回答
1804 浏览

java - 使用多个外部 jar 文件编译和运行 java 程序

我有一个简单的程序,它使用 apache.poi 外部库来操作 excel 文件。我在 windows 环境中使用了 eclipse,现在我必须使用终端在 linux 上编译和运行我的程序。我搜索了如何包含我需要的那些罐子,但最终出现以下错误:

错误:无法找到或加载主类 xlsToCsv。

我遵循的步骤是这样的:

javac -cp ./jars/poi-3.13-20150929.jar:./jars/poi-ooxml-schemas-3.13-20150929.jar:./jars/poi-ooxml-3.13-20150929.jar:./jars/xmlbeans -2.6.0.jar xlsToCsv.java

java -cp ./jars/poi-3.13-20150929.jar:./jars/poi-ooxml-schemas-3.13-20150929.jar:./jars/poi-ooxml-3.13-20150929.jar:./jars/xmlbeans -2.6.0.jar xlsToCsv

我当前的目录是 /home/demo/Desktop/xls_to_csv xlsToCsv.java 文件在哪里。jar 文件位于 /home/demo/Desktop/xls_to_csv/jars 中。

任何人都可以告诉我并解释正确的语法吗?是否可以调用包含所有 jar 文件的文件夹而不是单独调用它们?

提前致谢。

编辑,我的代码:

0 投票
1 回答
3679 浏览

java - 使用 .java 文件的路径和外部 jar 的路径在 linux 中编译和运行 java 程序

昨天我在stackoverflow上用答案解决了一个问题。但我最终遇到了另一个问题,我会尽量清楚:

我在/home/demo/Desktop/xlsToCsv/目录中有一个项目文件夹,其中包含 java 文件"xlsToCsv.java"和另一个包含我需要的外部 jar 的目录/home/demo/Desktop/xlsToCsv/jars

现在我需要编译并运行我的程序。昨天我运行了一个假设我已经在里面/home/demo/Desktop/xlsToCsv/的命令,命令是:

问题已解决,我能够毫无问题地运行我的程序。但是,我的程序应该从根目录运行,即当我打开 linux 终端时它所在的目录,而无需发出“cd”命令。

因此,当我打开终端时,.java 文件的路径是:

jars 文件夹的路径是:

/home/demo/Desktop/xlsToCsv/jars/*

有人可以向我解释我必须做什么,以及原因吗?因为更多的是运行程序,所以想知道原因,了解java中的classpath机制。

0 投票
1 回答
699 浏览

android - Android databindingError:解决后无法更改配置“:mobileBanking:compile”的依赖关系

我在为我的项目添加数据绑定时遇到了很多麻烦。有一个复杂的 build.gradle。不幸的是,我不能从中发布太多内容。
如果我在我的应用程序 build.gradle 文件中将数据绑定 {enabled = true} 添加到我的 android 块中,我会收到以下错误 -->

错误:解决后无法更改配置“:projectName:compile”的依赖关系。无法在空对象上获取属性“javaCompile”。

我已经在我的类路径中添加了数据绑定库。如果我不添加 dataBinding {enabled = true} 块,则构建成功并警告生成的源位于错误的文件夹中。

有任何想法吗?

0 投票
2 回答
466 浏览

java - Compile Circular Dependency classes using javax.tools.JavaCompiler

I have been trying to compile some Java Classes in a String using java. I have used javax.tools.JavaCompiler to compile the Classes in the Strings.

I have made instances of SimpleJavaFileObject by a Subclass that I have made of SimpleJavaFileObject.

and I have made Instances of this class, added it to an ArrayList, then Got the

ToolProvider.SystemJavaCompiler();

and added compilation options. and then Compiled

I have tested this with 3 classes that have circular dependency. it gives the error that it cannot find the symbol of a reference. it seems that unlike javac, this Compiler looks at each item in the list individually and tries to compile each alone.

how to achieve the same result as Javac using this compiler?? Someone please point me in the right direction :) Thanks.

0 投票
1 回答
1532 浏览

checksum - 在后续构建中编译的 jar 文件的校验和结果不同?

我正在使用具有相同 JVM 的本地机器(Windows 和 Cygwin)上构建的 jar 文件验证远程 unix 盒子上存在的 jar 文件。

作为 POC,我正在尝试验证是否使用在我的机器上生成的 jar 文件生成了相同的校验和,并在下面进行了尝试,

  1. 第一次使用ant脚本生成jar文件
  2. 计算校验和(例如“xyz abc”)
  3. 使用相同的 ant 脚本再次生成 jar 文件,而无需更改任何内容
  4. 我得到不同的校验和但相同的字节数(例如“xvw abc”)

我不确定java内部进程如何生成类文件然后生成jar文件,有人可以帮我理解以下几点

  1. cksumunix/cygwin的实用程序在得出值时是否考虑文件的时间戳?
  2. 如果我们保持其他所有内容相同[编译器版本+源代码+机器+环境],生成的编译类文件/jar文件的校验和会不同吗?
0 投票
2 回答
290 浏览

java - JavaCompiler 并没有真正编译该类

我想使用反射来获取一个新创建的java类的所有方法。如下所示,我通过从另一个文件复制创建了 java 类,然后使用 JavaCompiler 编译新创建的 Java。但我不知道为什么没有创建目标类文件。PS:如果我给错误的源目标java文件路径,会有编译信息像"javac: cannot find file: codeGenerator/Service.java". 谢谢你们。

编译方法: