maven混淆java代碼(java源代碼混淆)

本文目錄一覽:

maven環境下寫java,改一點代碼都要重新build一次才生效,麻煩死,跪求解決辦法!

你應該使用eclipse+tomcat開發測試,maven+jetty發布和管理項目。

開發時把maven項目轉變成eclipse項目,然後導入eclipse開發,使用tomcat測試。

maven有命令可以轉換成eclipse工程,百度一下就知道怎麼搞。

allatori代碼混淆工具能與maven結合嗎

參考方法: 混淆的war文件和config.xml配置文件 config.xml //in=”需要混淆的文件” ,out=”混淆後的文件” //不需要混淆的類,屬性,方法的配置參考文檔。

如何用maven將java8寫的代碼編譯為java6平台的

在一般的Java應用開發過程中,開發人員使用Java的方式比較簡單。打開慣用的IDE,編寫Java源代碼,再利用IDE提供的功能直接運行Java 程序就可以了。這種開發模式背後的過程是:開發人員編寫的是Java源代碼文件(.java),IDE會負責調用Java的編譯器把Java源代碼編譯成平台無關的字節代碼(byte code),以類文件的形式保存在磁盤上(.class)。Java虛擬機(JVM)會負責把Java字節代碼加載並執行。Java通過這種方式來實現其“編寫一次,到處運行(Write once, run anywhere)” 的目標。Java類文件中包含的字節代碼可以被不同平台上的JVM所使用。Java字節代碼不僅可以以文件形式存在於磁盤上,也可以通過網絡方式來下載,還可以只存在於內存中。JVM中的類加載器會負責從包含字節代碼的字節數組(byte[])中定義出Java類。在某些情況下,可能會需要動態的生成 Java字節代碼,或是對已有的Java字節代碼進行修改。這個時候就需要用到本文中將要介紹的相關技術。首先介紹一下如何動態編譯Java源文件。

動態編譯Java源文件

在一般情況下,開發人員都是在程序運行之前就編寫完成了全部的Java源代碼並且成功編譯。對有些應用來說,Java源代碼的內容在運行時刻才能確定。這個時候就需要動態編譯源代碼來生成Java字節代碼,再由JVM來加載執行。典型的場景是很多算法競賽的在線評測系統(如PKU JudgeOnline),允許用戶上傳Java代碼,由系統在後台編譯、運行並進行判定。在動態編譯Java源文件時,使用的做法是直接在程序中調用Java編譯器。

JSR 199引入了Java編譯器API。如果使用JDK 6的話,可以通過此API來動態編譯Java代碼。比如下面的代碼用來動態編譯最簡單的Hello World類。該Java類的代碼是保存在一個字符串中的。

01 public class CompilerTest {

02 public static void main(String[] args) throws Exception {

03 String source = “public class Main { public static void main(String[] args) {System.out.println(\”Hello World!\”);} }”;

04 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

05 StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);

06 StringSourceJavaObject sourceObject = newCompilerTest.StringSourceJavaObject(“Main”, source);

07 Iterable extends JavaFileObject fileObjects = Arrays.asList(sourceObject);

08 CompilationTask task = compiler.getTask(null, fileManager, null,null, null, fileObjects);

09 boolean result = task.call();

10 if (result) {

11 System.out.println(“編譯成功。”);

12 }

13 }

14

15 static class StringSourceJavaObject extends SimpleJavaFileObject {

16

17 private String content = null;

18 public StringSourceJavaObject(String name, String content) ??throwsURISyntaxException {

19 super(URI.create(“string:///” + name.replace(‘.’,’/’) + Kind.SOURCE.extension), Kind.SOURCE);

20 this.content = content;

21 }

22

23 public CharSequence getCharContent(boolean ignoreEncodingErrors) ??throws IOException {

24 return content;

25 }

26 }

27 }

如果不能使用JDK 6提供的Java編譯器API的話,可以使用JDK中的工具類com.sun.tools.javac.Main,不過該工具類只能編譯存放在磁盤上的文件,類似於直接使用javac命令。

另外一個可用的工具是Eclipse JDT Core提供的編譯器。這是Eclipse Java開發環境使用的增量式Java編譯器,支持運行和調試有錯誤的代碼。該編譯器也可以單獨使用。Play框架在內部使用了JDT的編譯器來動態編譯Java源代碼。在開發模式下,Play框架會定期掃描項目中的Java源代碼文件,一旦發現有修改,會自動編譯 Java源代碼。因此在修改代碼之後,刷新頁面就可以看到變化。使用這些動態編譯的方式的時候,需要確保JDK中的tools.jar在應用的 CLASSPATH中。

下面介紹一個例子,是關於如何在Java裡面做四則運算,比如求出來(3+4)*7-10的值。一般的做法是分析輸入的運算表達式,自己來模擬計算過程。考慮到括號的存在和運算符的優先級等問題,這樣的計算過程會比較複雜,而且容易出錯。另外一種做法是可以用JSR 223引入的腳本語言支持,直接把輸入的表達式當做JavaScript或是JavaFX腳本來執行,得到結果。下面的代碼使用的做法是動態生成Java源代碼並編譯,接着加載Java類來執行並獲取結果。這種做法完全使用Java來實現。

01 private static double calculate(String expr) throws CalculationException {

02 String className = “CalculatorMain”;

03 String methodName = “calculate”;

04 String source = “public class ” + className

05 + ” { public static double ” + methodName + “() { return ” + expr +”; } }”;

06 //省略動態編譯Java源代碼的相關代碼,參見上一節

07 boolean result = task.call();

08 if (result) {

09 ClassLoader loader = Calculator.class.getClassLoader();

10 try {

11 Class? clazz = loader.loadClass(className);

12 Method method = clazz.getMethod(methodName, new Class?[] {});

13 Object value = method.invoke(null, new Object[] {});

14 return (Double) value;

15 } catch (Exception e) {

16 throw new CalculationException(“內部錯誤。”);

17 }

18 } else {

19 throw new CalculationException(“錯誤的表達式。”);

20 }

21 }

上面的代碼給出了使用動態生成的Java字節代碼的基本模式,即通過類加載器來加載字節代碼,創建Java類的對象的實例,再通過Java反射API來調用對象中的方法。

Java字節代碼增強

Java 字節代碼增強指的是在Java字節代碼生成之後,對其進行修改,增強其功能。這種做法相當於對應用程序的二進制文件進行修改。在很多Java框架中都可以見到這種實現方式。Java字節代碼增強通常與Java源文件中的註解(annotation)一塊使用。註解在Java源代碼中聲明了需要增強的行為及相關的元數據,由框架在運行時刻完成對字節代碼的增強。Java字節代碼增強應用的場景比較多,一般都集中在減少冗餘代碼和對開發人員屏蔽底層的實現細節上。用過JavaBeans的人可能對其中那些必須添加的getter/setter方法感到很繁瑣,並且難以維護。而通過字節代碼增強,開發人員只需要聲明Bean中的屬性即可,getter/setter方法可以通過修改字節代碼來自動添加。用過JPA的人,在調試程序的時候,會發現實體類中被添加了一些額外的 域和方法。這些域和方法是在運行時刻由JPA的實現動態添加的。字節代碼增強在面向方面編程(AOP)的一些實現中也有使用。

java 代碼混淆 用什麼命令

Jocky的下載和配置

OperaMasks上的下載鏈接已經失效,請移步CSDN自行搜索下載

1、下載完成後解壓得到名為org.apusic.jocky_1.0.3的文件夾,把這個文件夾放到eclipse根目錄的plugins文件夾下(myeclipse和eclipse同理)。

2、重啟eclipse,右鍵一個工程文件,出現Jocky選項說明OK。

3、一般是先進行設置-Jocky Settings,然後進行Jocky Now!。以下是settings界面

Enable Jocky多選框選中

Jocky build file是在項目創建一個xml文件,根據裡面的配置進行混淆

Scramble level是進行混淆的代碼等級,有none、private、package、protected、public、all,將根據設置對java文件中的相應修飾符修飾的方法代碼進行混淆

Target VM是java虛擬機的版本,有1.4和1.5,一般選擇1.5

Output directory是輸出文件夾,在項目根目錄下

點擊確認會自動根據項目的設置生成xml文件

4、jocky_build.xml,實際上是一個ant build文件,由系統自動生成,有幾處需要說明

pathelement location=”bin”/ pathelement location=”XXX.jar”/這類標籤代表項目編譯所需的jar包,由於是自動生成一般不用理睬,如果出現找不到相關的package之類的報錯,那麼有可能是location路徑有問題。如果你安裝系統時是用戶名設置成了中文名,並且使用了maven,maven的jar包的下載路徑設置成了默認${user}/.m2/repository/,那麼jocky這裡的路徑會出現問題,中文名的用戶名會亂碼或者消失,請修改maven配置xml文件修改下載路徑localRepository[自己指定的路徑]/localRepository 。

javac destdir=”${jocky.output.dir}/bin” target=”${target}” encoding=”UTF-8″ 代碼中如果有中文名,必須手動設定編碼,默認是沒有的。

src path=”src”/ 設定源文件的目錄,因為有時候我們只想輸出src目錄下的部分包而不是全部。

如何用Java代碼執行maven編譯

我的思路:在windows環境下,用Java調用CMD進入待操作的項目目錄下,然後執行mvn compile。或者執行bat批處理文件,用bat執行maven命令。

使用maven編譯JAVA程序是出錯

問題描述:

在eclipse中build一個普通maven項目,報錯,提示信息是缺少maven插件(插件名稱忘了)。

原因:

可能是由於使用了eclipse自帶的jre導致的,這個jre里沒有tools.jar,而jdk的lib目錄下有(個人理解)。

解決辦法:

1、檢查eclipse的配置,確保使用的不是eclipse自帶的版本。

步驟:在eclipse中打開Window-Preferences-Java-Installed JREs-Add,添加自己下載並配置好的jdk(別忘了配置環境變量),我用的是jdk1.6.0_4.3。

2、然後再次編譯maven項目,仍然報錯,但提示信息改變了,提示的是C:\Users\Administrator.EED4VRFALFPIIBP\.m2\repository\commons-logging\commons-logging下的jar包解析失敗;

3、解決方案:刪除repository文件夾,確保網絡暢通,重啟eclipse,執行Maven-Project

Update,問題解決。

注意:如果你的eclipse中配置了tomcat,那麼你也需要重新選擇tomcat的jdk版本,確保與前面的一致。

步驟:在eclipse中打開Window-Preferences-Server-Runtime

Environment-選中你的tomcat server-Edit,在JRE這項里選擇你的jdk,完成。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/239280.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:15
下一篇 2024-12-12 12:15

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • g3log源代碼學習

    g3log是一個高性能C++日誌庫,其代碼十分精簡和可讀性強,本文將從3個方面詳細介紹g3log源代碼學習。 一、g3log源代碼整體架構 g3log的整體架構十分清晰,其中有3個…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29

發表回復

登錄後才能評論