http://www.cnblogs.com/xxNote/p/6572113.html
http://blog.csdn.net/sdcxyz/article/details/45076321
由于jdk的版本问题导致在windows上编译打包好的jar包放在linux服务器上运行的时候出现一点小异常,所以决定在linux上进行一次项目编译,这有两个选择
1.在相同的linux环境下安装linux版的eclipse 进行编译
2.在linux用javac命令行进行编译
3.用maven,ant等项目管理工具
经试验,使用方法1确实解决了我遇到的问题,但是太麻烦。
这里记录一下第二种方法,第三种方法。。我也不会使用。
目录结构是这样的:
├── lib
└── src
├── com
│ └── xxx
└── org
└── json
lib下面有依赖的库
src下面是源文件
用javac编译的步骤:
1.先找出所有需要编译的java文件并保存到文件列表到javaFiles.txt
find src -name \*.java >javaFiles.txt
2.使用javac进行编译,因为源代码依赖lib里面的库,所以需要指定classpath参数
javac -d bin-cp .:./lib/* @.javaFiles.txt
-d指定输出目录 -cp指定classpath为当前目录和lib目录下面所有的库文件 @后面指定需要编译的文件列表
3.使用jar进行打包
先进入class文件的目录
cd bin
jar -cp xxx.jar com org 这样就把class文件打包成jar包了
1.在相同的linux环境下安装linux版的eclipse 进行编译
2.在linux用javac命令行进行编译
3.用maven,ant等项目管理工具
经试验,使用方法1确实解决了我遇到的问题,但是太麻烦。
这里记录一下第二种方法,第三种方法。。我也不会使用。
目录结构是这样的:
├── lib
└── src
├── com
│ └── xxx
└── org
└── json
lib下面有依赖的库
src下面是源文件
用javac编译的步骤:
1.先找出所有需要编译的java文件并保存到文件列表到javaFiles.txt
find src -name \*.java >javaFiles.txt
2.使用javac进行编译,因为源代码依赖lib里面的库,所以需要指定classpath参数
javac -d bin-cp .:./lib/* @.javaFiles.txt
-d指定输出目录 -cp指定classpath为当前目录和lib目录下面所有的库文件 @后面指定需要编译的文件列表
3.使用jar进行打包
先进入class文件的目录
cd bin
jar -cp xxx.jar com org 这样就把class文件打包成jar包了
//编译多个文件
javac path_of_file_a/a.java path_of_file_b/b.java path_of_file_c/c.java
-cp(classpath) 与 -sourcepath 的区别与联系:
当 -sourcepath 没有指定时,在 -cp 路径里面搜索 .class 和 .java 文件,
当 -sourcepath 指定时,只搜索 -cp 路径下的 .class 文件,即使 -cp 路径下有要找的 .java 文件也会不搜索这个文件,
而 -sourcepath 只搜索 .java 文件,不搜索 .class 文件。
因此应该避免用 -sourcepath ,而只用 -cp 来指定搜索 .class 和 .java 文件的路径。
而且还有一个要清楚的地方,-cp(classpath) 与 -sourcepath 是在 javac 解析 .java 文件里面的未知符号时搜索这个符号所在 .class 或者 .java 文件的路径,而不是从-cp(classpath) 与 -sourcepath 里面搜索传给javac 命令的参数里面的 .java 文件。
比如:C:\Users\xxNote\Desktop\test>javac x/a.java -cp y
这句的意思是编译 C:\Users\xxNote\Desktop\test\x\a.java ,如果 a.java 里面有未知的符号b, 那么从 C:\Users\xxNote\Desktop\test\y\ 路径下的 .class 或 .java 文件里面搜索,而不是从 C:\Users\xxNote\Desktop\test\y\ 路径下搜索 x\a.java 。
各个命令之间没有先后顺序,思考一下,javac是如何判断各个参数呢?当遇到参数结尾是 .java 的就知道是要编译的 java 文件,其他参数前都是 -xx 或者 @xx 这样就区分了。
>javac命令行参数
用法: javac <options> <source files>
其中, 可能的选项包括:
-g 生成所有调试信息
-g:none 不生成任何调试信息
-g:{lines,vars,source} 只生成某些调试信息
-nowarn 不生成任何警告
-verbose 输出有关编译器正在执行的操作的消息
-deprecation 输出使用已过时的 API 的源位置
-classpath <路径> 指定查找用户类文件和注释处理程序的位置
-cp <路径> 指定查找用户类文件和注释处理程序的位置
-sourcepath <路径> 指定查找输入源文件的位置
-bootclasspath <路径> 覆盖引导类文件的位置
-extdirs <目录> 覆盖所安装扩展的位置
-endorseddirs <目录> 覆盖签名的标准路径的位置
-proc:{none,only} 控制是否执行注释处理和/或编译。
-processor <class1>[,<class2>,<class3>...] 要运行的注释处理程序的名称; 绕过默
认的搜索进程
-processorpath <路径> 指定查找注释处理程序的位置
-parameters 生成元数据以用于方法参数的反射
-d <目录> 指定放置生成的类文件的位置
-s <目录> 指定放置生成的源文件的位置
-h <目录> 指定放置生成的本机标头文件的位置
-implicit:{none,class} 指定是否为隐式引用文件生成类文件
-encoding <编码> 指定源文件使用的字符编码
-source <发行版> 提供与指定发行版的源兼容性
-target <发行版> 生成特定 VM 版本的类文件
-profile <配置文件> 请确保使用的 API 在指定的配置文件中可用
-version 版本信息
-help 输出标准选项的提要
-A关键字[=值] 传递给注释处理程序的选项
-X 输出非标准选项的提要
-J<标记> 直接将 <标记> 传递给运行时系统
-Werror 出现警告时终止编译
@<文件名> 从文件读取选项和文件名