当前位置:  技术问答>java相关

如何把多个.java文件编译成一个class?

    来源: 互联网  发布时间:2017-04-04

    本文导语:  rt 3q | 你就打包成一个jar,引入 | javac *.java | 一个class? 一个jar | 不能把! 只能打包成一个jar的文件, 用jdk目录bin下的jar | ...

rt

3q

|
你就打包成一个jar,引入

|
javac *.java

|
一个class?
一个jar

|
不能把!

只能打包成一个jar的文件,
用jdk目录bin下的jar

|
一个类就是一个class文件,多个java文件应该会有多个class吧

|
j2sdk1.4里,当你javac一个.java文件时,如果相关的.java文件没有编译为.class文件,则它们同时也被编译为.class文件

|
请注意定义:每个.java文件必须有一个public class,每个.java生成一个.class。

|
大哥
每个类必定会编译出一个.class
而一个java文件最少会描述一个类
也就是说一个java文件编译出的.class肯定是大于等于1的

|
agree to ZeroC(笨小孩)

|
写个批处理,将每次的
javac *.java
jar .....
两个命令写到一起就成了。

|
但是要成为一个class,可能是不行的吧。

|
同意   caoze(大漠孤烟)

|
除非修改编译器

|
应该有这种软件,我见过分割器

Java-Split
Splits merged Java classes (Windows 95/98/NT)

 THE PURPOSE
Sometimes developers merge few class files into a single runnable class 
file. Java-Split splits the merged files back and creates the original 
classes.

|
編譯、反編譯、反反編譯
「盜版」的行為,天天都在我們的周遭上演,所以今年五月由 BSA(商業軟體聯盟)和法務部發起的「反盜版」活動,著實讓大家風聲鶴唳了好一陣子。但是,即使在這樣詭譎的氣氛之下,由大專院校學生為主的「反反盜版」活動,到也振振有詞,轟轟烈烈地攻佔媒體版面。有「盜版」,就有「反盜版」;有「反盜版」,就有「反反盜版」,這個世界就是這麼一回事。

同樣的道理,有「編譯」(compile),就有「反編譯」(decompile);有「反編譯」,就有「反反編譯」。對於 Java 和 .NET 這種虛擬機器的中間碼來說,尤其明顯。

Java 程式編譯後的結果是 Java Bytecode,而 .NET 編譯後的結果是 CIL(Common Intermediate Language),兩者都具有下列的特性: 

同為堆疊式(stack-based)指令集。 
同為高階物件導向機器語言。 
和平台無關。 
Code Validation 
Symbolic Link 
上述任何一點特色,都可以讓程式變得更容易反編譯,全部五點結合起來更是不得了。所以要反編譯 Java 和 .NET 可以說是相當容易的。網路上就到處流傳著 Java 的反編譯器(decompiler),可以把編譯後的檔案反推出原始碼,相信不久之後 .NET 也會遇到一樣的問題。(至少,喜歡搞破壞的我就正嘗試著寫一個 .NET decompiler。)

試想,如果你將辛辛苦苦開發出來的 Java 和 .NET 程式交給別人(蔡學鏞?),他只要透過反編譯器,就可以推出原始碼,你的智慧財產很可能會受到侵犯。

想要保護自己,你必須在 Java 或 .NET 軟體出貨前,進行反反編譯,這個動作通常稱為混淆(obfuscate)。被混淆過的程式碼,依然遵照原來的檔案格式和指令集,所以依然可以執行,執行結果也和混淆前一樣。只是被混淆過的程式碼變得更亂,更不容易被反編譯成功。

有的 Java 開發工具(例如 JBuilder)有內附混淆器(obfuscator),或者你也可以購買功能更強大的混淆器。這些商業的混淆器通常只做三件事: 
將每一個 method 內部用更亂的方式組織。 
將 Java Constant Pool,或 .NET metadata 內可以消除的 Symbolic Data 消除(例如 private method 的名字)。 
將 debug 資訊(例如 Java 的 LocalVariableTable 與 LineNumberTable)全部刪除。 
Obfuscator 的作用如果只是如同上述一般,只有 method 局部的作用,效果不大。欲大幅度地增加反編譯的難度,必須搭配下列的方式: 
Class 內的混淆:將 class 內的 method 互相混淆。 
Class 之間的混淆:將 class 之間的關係混淆,例如將父類別和子類別合併或拆解等。 
有一些學術論文有對上述兩點做出研究,但成效仍然不大,而且必須手動調整,無法由軟體自動處理。這方面值得大家投入更深入的研究。

混淆過的程式會遇到下面的問題: 
通常效率會變差。 
可能無法執行。我遇過這樣的情況,有可能是混淆器的錯,也有可能是 JVM 的錯。 
如果進行「Class 之間的混淆」,稍有不慎,就很可能會無法執行。例如:Java 程式中如果有用到 instanceof,或者 C# 程式中有用到 is,就要很小心的進行「Class 之間的混淆」,否則後果不堪設想。

混淆的目的有兩個層次: 
讓程式無法被自動反編譯:例如做出一些特殊的跳躍(goto),讓程式區塊(block)的關係無法被找出特定的 pattern。 

讓程式就算被反編譯成功,也不容易被程式員閱讀理解:想辦法加入一些不易被識破的程式碼來欺騙程式員。 

Obfuscator 不是萬靈丹,如果遇上了一個精通 obfuscating 技術的人,佐以 profiling 工具,原始碼還是會落入他的手中。所以,使用 obfuscator 時,你必須有這樣的心理準備:「防君子,不妨小人;防笨蛋,不防聰明人」。盡可能將軟體放在 server 改為提供 service,而不將軟體賣到客戶手上,這才是上策。

    
 
 

您可能感兴趣的文章:

  • [提问]Linux下如何把多个.a文件编译一个.so文件,或者把多个.so文件编译成一个.so文件
  • 多个文件,怎么编译
  • 怎么编译多个文件
  • 关于linux编译多个源文件的问题
  • 怎样编译多个文件的驱动???
  • Linux下面如何使用make命令编译多个.c文件
  • (只有10分了)如何用GCC编译多个文件啊
  • 如何用make同时编译多个程序?
  • UNIX下 用CC如何编译多个c语言源程序文件
  • 刚学linux,gcc 多个文件一起编译一个简单错误
  • 初学linux,多个c文件怎么编译?附上我 写的 程序,请大侠指点~
  • 求助!Linux下多个.c和.h的编译问题
  • 程序要在多个系统中运行,条件编译应该怎样设置?
  • 如何用g++编译包含多个文件的源码
  • Fedora12编译 wxWidgets 多个版本出现相同错误!求救!
  • 关于使用 g++/ld 编译连接多个 c++ 文件的问题!
  • PHP 'ext/soap/php_xml.c'不完整修复存在多个任意文件泄露漏洞
  • 如何用socket一次传输多个文件,如何确定文件一个文件结束
  • 求助关于zip命令,如何把文件压缩成指定大小的多个文件(Ubuntu7.04)
  • 合并一个文件夹下多个文件内容的单行shell命令
  • 求一个命令或脚本,删除多个多级文件夹下指定格式(*.cpp)外的其他文件
  • 怎样使文件选择器可以选择多个文件?
  • vim管理多个文件
  • MAKEFILE求助,LINUX下如何将多个.a文件合并为一个.a文件或者.lib文件
  • 文件操作 多个进程打开文件 不加锁 情况如何
  • 如何把多个小文本文件合并成为一个大的文件?
  • rsync客户端如何从远程计算机上传输多个文件到本地计算机?
  • linux下如何设置文件夹权限属于多个组?
  • 用tar命令如何解压多个文件
  • 请问如何在一个文件系统修改源码管理并使用多个卷(存储设备)
  • 如何在多个文件中搜索是否存在某个字符?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Uploadify 'uploadify.php'存在多个输入验证漏洞
  • 我写了个linux下的网络程序,程序在多个电脑间通信,但是我没有多个电脑,怎么调试这样的程序啊?
  • linux下grep命令实现查找多个关键字(与关系和或关系)
  • 一个物理服器一个公网IP,多个虚拟机,多个域名
  • 多jdk环境下安装多个tomcat冲突解决配置方法
  • 一个进程中的多个线程不会被调度到一台机器中的多个cup并行执行吗?
  • Apache + tomact 配多个域名 对 多个目录。
  • 一个LINUX的驱动程序中,能不能注册多个中断?
  • 300分!查错,解决多个生产者和多个消费者问题 高手进!分不够想法子再加!
  • 如何使一个按钮响应多个事件?过来侃侃@!!!!
  • linux系统支持多个网卡同时工作吗?
  • linux字符界面怎么同时运行多个程序?
  • apache中使用mod_gnutls模块实现多个SSL站点配置(多个HTTPS协议的虚拟主机)
  • 请问如何实现多个并行的定时器?
  • 请教POSIX问题:一个进程中,可以有多个互斥锁麽?
  • linux下如何做象windows下的OnTimer一样,多个定时器用一个回调函数!!!!!!!
  • 可以在一台机器上同时登录多个用户吗
  • 多个机器挂载统一个磁盘阵列的同一个lun的问题
  • 从多个socket接收数据
  • 一个虚拟机可以装多个系统吗
  • 多个sock同时监听一个port


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3