java重新入坑

毕业八年了,从毕业后就没有写过java代码,仅平常看看android相关的资讯和博客及时不时编译下Android工程,以前学过的java早忘光了。

最近因工作需要要重新学习下java,结果上来就踩一坑。

第一坑

更新于:2016-07-06

很简单一事,随便抄了个Property.java,想着怎么执行呢,按着python、lua、php、nodejs类型的方式java Property.java,呕妹糕,找不到或无法加载主类 Property.java

查询网站,原谅我已经忘记了命令行执行java程序是需要先编译一下下的,找到javac.exe执行后生成了Property.class,然后java Propery,又报错找不到或无法加载主类 Property

why?why?都有class了还不给执行?查访网络后发现虽然我机器上被各种情况装了各种java环境,可是PATH和CLASS_PATH都没有正确的被设置。

添加环境变量CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;PATH=%PATH%;.;%JAVA_HOME%\bin;后再执行,终于正常了。

jar中没有主清单属性

ref: http://jingyan.baidu.com/article/db55b60990f6084ba30a2fb8.html

验证一个java特性instrument时,将代码打包成jar包,在manifest.md里只使用了Premain-Class属性。但是在随后尝试直接启动时,未添加Main-Class属性。

第二坑

windows上正常的java程序,放到linux上编译失败。报错error: unmappable character for encoding ASCII
原因是windows上默认编码是我中文系统的gbk编码,而linux上出现编码不一致时需要在命令行中指定:

1
2
编译时:javac -encoding gbk test.java
运行时:java -Dfile.encoding=gbk test

当然,编码视不同情况可指定为utf-8等其它编码。

如果编码统一,则可以在环境变量中指定export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8,如果在在~/.bashrc文件里添加,就不用每次手动再改了!

第三坑 Could not reserve enough space

2017-01-11更新

编译某一项目时,该项目编译时提示错误:

1
2
3
4
5
6
7
8
9
Error:Unable to start the daemon process.
This problem might be caused by incorrect configuration of the daemon.
For example, an unrecognized jvm option is used.
Please refer to the user guide chapter on the daemon at https://docs.gradle.org/3.1/userguide/gradle_daemon.html
Please read the following process output to find out more:
-----------------------
Error occurred during initialization of VM
Could not reserve enough space for 2621440KB object heap
Java HotSpot(TM) Client VM warning: ignoring option MaxPermSize=1024m; support was removed in 8.0

是因为gradle.properties中有一行org.gradle.jvmargs=-Xmx2560m -XX:MaxPermSize=1024m,导致构建时java.exe报错。
直接使用命令行java -Xmx(n)M -version测试,发现在我的机器上最大只能到java -Xmx1256M -version,再研究研究,发现这是个32位的java,换用 64位jdk解决之。

其它坑待更新