Bladeren bron

第三轮整体测试,代码优化、逻辑完善、bug修复

JustryDeng 5 jaren geleden
bovenliggende
commit
064d82d66c
19 gewijzigde bestanden met toevoegingen van 180 en 291 verwijderingen
  1. 2 1
      class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/Forward.java
  2. 17 15
      class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/util/BashUtil.java
  3. 28 76
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/AllTest.java
  4. 14 22
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/AlreadyProtectedLibs_Test.java
  5. 13 21
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/Debug_Test.java
  6. 12 17
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/ExcludePrefix_Test.java
  7. 5 11
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/FinalName_Test.java
  8. 5 11
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/IncludeLibs_Test.java
  9. 5 11
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/IncludePrefix_Test.java
  10. 14 20
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/OriginJarOrWar_Test.java
  11. 8 20
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/SupportFile_Test.java
  12. 12 16
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/Tips_Test.java
  13. 42 50
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/War_Test.java
  14. BIN
      class-winter-core/src/test/resources/class-winter-core-1.0.0.jar
  15. BIN
      class-winter-core/src/test/resources/my-project-with-encrypted-lib-have-pwd.war
  16. BIN
      class-winter-core/src/test/resources/my-project-with-encrypted-lib-no-pwd.war
  17. BIN
      class-winter-core/src/test/resources/my-project-with-normal-lib.jar
  18. BIN
      class-winter-core/src/test/resources/my-project-with-normal-lib.war
  19. 3 0
      class-winter-maven-plugin/src/main/java/winter/com/ideaaedi/classwinter/plugin/ClassWinterPlugin.java

+ 2 - 1
class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/Forward.java

@@ -27,7 +27,7 @@ public class Forward {
         String includePrefix = parseValueByPrefixFromTail("includePrefix=", args);
         String excludePrefix = parseValueByPrefixFromTail("excludePrefix=", args);
         String finalName = parseValueByPrefixFromTail("finalName=", args);
-        String password = parseValueByPrefixFromTail(".password=", args);
+        String password = parseValueByPrefixFromTail("password=", args);
         String includeLibs = parseValueByPrefixFromTail("includeLibs=", args);
         String alreadyProtectedLibs = parseValueByPrefixFromTail("alreadyProtectedLibs=", args);
         String tips = parseValueByPrefixFromTail("tips=", args);
@@ -39,6 +39,7 @@ public class Forward {
         Logger.debug(Forward.class, "You input arg includePrefix -> " + includePrefix);
         Logger.debug(Forward.class, "You input arg excludePrefix -> " + excludePrefix);
         Logger.debug(Forward.class, "You input arg finalName -> " + finalName);
+        Logger.debug(Forward.class, "You input arg password -> " + password);
         Logger.debug(Forward.class, "You input arg includeLibs -> " + includeLibs);
         Logger.debug(Forward.class, "You input arg alreadyProtectedLibs -> " + alreadyProtectedLibs);
         Logger.debug(Forward.class, "You input arg tips -> " + tips);

+ 17 - 15
class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/util/BashUtil.java

@@ -25,7 +25,7 @@ public final class BashUtil {
     /**
      * 当前操作系统是否是windows
      */
-    private static final boolean IS_WINDOWS = System.getProperty("os.name").toLowerCase(Locale.ENGLISH).contains("windows");
+    public static final boolean IS_WINDOWS = System.getProperty("os.name").toLowerCase(Locale.ENGLISH).contains("windows");
     
     public static final String ORIGIN_KILL_PROCESS_BY_PORT_BAT = ""
             + "@echo off & setlocal EnableDelayedExpansion\n"
@@ -58,29 +58,30 @@ public final class BashUtil {
      *            命令
      * @return 结果
      */
-    public static String runCmd(String cmd) {
-        return runCmd(cmd, 0);
+    public static String runBash(String cmd) {
+        return runBash(cmd, 0);
     }
     
     /**
      * 运行命令
      *
-     * @param cmd
+     * @param bash
      *            命令
      * @param line
      *           返回第几行结果,<=0,则返回所有
      * @return 结果
      */
-    public static String runCmd(String cmd, int line) {
-        Logger.info(BashUtil.class, "cmd -> " + cmd + ", line -> " + line);
-        if (cmd == null || cmd.length() == 0) {
-            throw new ClassWinterException("cmd cannot be empty.");
+    public static String runBash(String bash, int line) {
+        // 直接执行命令行指令,记录warn
+        Logger.warn(BashUtil.class, "You are running bash -> " + bash+ ", line -> " + line);
+        if (bash == null || bash.length() == 0) {
+            throw new ClassWinterException("bash cannot be empty.");
         }
         Process process;
         Scanner sc = null;
         StringBuilder sb = new StringBuilder();
         try {
-            process = Runtime.getRuntime().exec(cmd);
+            process = Runtime.getRuntime().exec(bash);
             process.getOutputStream().close();
             sc = new Scanner(process.getInputStream(), IS_WINDOWS ? "GBK" : StandardCharsets.UTF_8.name());
             int i = 0;
@@ -104,18 +105,19 @@ public final class BashUtil {
     /**
      * 运行命令并输出到控制台
      *
-     * @param cmd
+     * @param bash
      *            命令
      */
-    public static void runCmdAndPrint(String cmd) {
-        Logger.info(BashUtil.class, "cmd -> " + cmd);
-        if (cmd == null || cmd.length() == 0) {
-            throw new ClassWinterException("cmd cannot be empty.");
+    public static void runBashAndPrint(String bash) {
+        // 代码直接调用执行命令行指令是不被推荐的,记录warn
+        Logger.warn(BashUtil.class, "You are running bash -> " + bash);
+        if (bash == null || bash.length() == 0) {
+            throw new ClassWinterException("bash cannot be empty.");
         }
         Process process;
         Scanner sc = null;
         try {
-            process = Runtime.getRuntime().exec(cmd);
+            process = Runtime.getRuntime().exec(bash);
             process.getOutputStream().close();
             sc = new Scanner(process.getInputStream(), IS_WINDOWS ? "GBK" : StandardCharsets.UTF_8.name());
             while (sc.hasNextLine()) {

+ 28 - 76
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/AllTest.java

@@ -1,7 +1,6 @@
 package winter.com.ideaaedi.classwinter;
 
 import winter.com.ideaaedi.classwinter.author.JustryDeng;
-import winter.com.ideaaedi.classwinter.executor.EncryptExecutor;
 import winter.com.ideaaedi.classwinter.util.BashUtil;
 import winter.com.ideaaedi.classwinter.util.PathUtil;
 
@@ -21,83 +20,36 @@ public class AllTest {
     public static void main(String[] args) {
         // 杀下进程(以保证端口没有被占用)
         BashUtil.killProcessByPorts("8080");
-        
+
         // 加密
-        String encryptedJar = encryptTest();
-    
+        String projectRootDir = PathUtil.getProjectRootDir(AllTest.class);
+        String originJarOrWar = projectRootDir + "my-project-with-encrypted-lib-have-pwd.jar";
+        String includePrefix = "com.szlaozicl,com.aspire.ssm,org.springframework.aop.target.dynamic,com.fasterxml.jackson";
+        String excludePrefix = "com.aspire.ssm.config,com.aspire.ssm.util.Person";
+        String finalName = "jd";
+        String password = "pwd12345";
+        String includeLibs = "spring-aop-5.2.7.RELEASE.jar,jackson-core-2.10.4.jar";
+        String tips = "方法已经被class-winter加密保护了,请不要直接使用java -jar xxx.jar启动项目,请使用java -javaagent:xxx.jar -jar xxx.jar启动项目.";
+        String alreadyProtectedLibs = "encrypted-lib-have-pwd-1.0.0.jar:qwer123~";
+        String debug = "true";
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-1.0.0.jar"
+                + " originJarOrWar=" + originJarOrWar
+                + " includePrefix=" + includePrefix
+                + " excludePrefix=" + excludePrefix
+                + " finalName=" + finalName
+                + " password=" + password
+                + " includeLibs=" + includeLibs
+                + " tips=" + tips
+                + " alreadyProtectedLibs=" + alreadyProtectedLibs
+                //+ "  supportFile=" +  supportFile
+                + " debug=" + debug
+                ;
+        BashUtil.runBashAndPrint(startBat);
+
+        String encryptedJar = projectRootDir + finalName + ".jar";
         // 解密(模拟启动加密后的jar包)
         // String javaagentArgs = "";
-        String javaagentArgs = "=debug=true,password=pwd12345";
-        BashUtil.runCmdAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
-    }
-    
-    /**
-     * 加密
-     */
-    public static String encryptTest() {
-        String projectRootDir = PathUtil.getProjectRootDir(AllTest.class);
-        EncryptExecutor encryptExecutor = EncryptExecutor.builder()
-                //(必须)-> 加密spring-boot可执行jar包
-                .originJarOrWar(projectRootDir + "my-project-with-encrypted-lib-have-pwd.jar")
-                // 加密普通jar包
-                // .originJarOrWar(projectRootDir + "normal-jar.jar")
-                // 加密war包
-                // .originJarOrWar(projectRootDir + "war-project.war")
-                
-                // (必须)-> 前缀匹配的方式,指定需要加密的class
-                // 逗号后面有没有空格都可以
-                .includePrefix("com.szlaozicl,com.aspire.ssm,org.springframework.aop.target.dynamic,com.fasterxml.jackson")
-                
-                // (可选)-> 前缀匹配的方式,指定需要忽略加密的class,用于对includePrefix指定的范围中的目标进行排除
-                // 逗号后面有没有空格都可以
-                .excludePrefix("com.aspire.ssm.config,com.aspire.ssm.util.Person")
-                
-                // (可选)-> 指定加密后的jar包的名称, 会在同目录下生成abc-encrypted.jar
-                // 若与原jar(or war)同名,则会覆盖原来的jar(or war)包.
-                // 若不指定,则生成的 加密后的jar(or war)包名为 = 原名-encrypted.jar
-                .finalName("jd")
-                
-                // (可选)-> 指定加密密码(若不指定,则系统会自动生成)
-                .password("pwd12345")
-                
-                // (可选)-> 前缀匹配的方式,指定还需额外对jar的依赖包libs中的哪些jar进行加密,更多解释详见net.jd.classwinter.executor.EncryptExecutor.includeLibSet上面的javadoc
-                // 逗号后面有没有空格都可以
-                .includeLibs("spring-aop-5.2.7.RELEASE.jar,jackson-core-2.10.4.jar")
-                
-                // (可选)-> 提示信息,当用户直接启动项目而不使用javaagent启动时,程序提示tips信息后会停止
-                .tips("方法已经被class-winter加密保护了,请不要直接使用java -jar xxx.jar启动项目,请使用java -javaagent:xxx.jar -jar xxx.jar启动项目.")
-        
-                // (可选)-> 指明当前项依赖来的lib中,有哪些lib是本身就已经是被class-winter混淆了的
-                //  格式形如 xxx.jar:password, 多个之间使用逗号分割, 如果当初对该lib进行混淆时没有主动指定密码,那么可以不写
-                //.alreadyProtectedLibs("xxx1.jar,xxx2.jar")
-                //.alreadyProtectedLibs("xxx1.jar:pwd1,xxx2.jar")
-                //.alreadyProtectedLibs("xxx1.jar:pwd1,xxx2.jar:pwd2")
-                .alreadyProtectedLibs("encrypted-lib-have-pwd-1.0.0.jar:qwer123~")
-        
-                // (可选)-> 加密时,额外往加密上下文中添加的jar文件(或者jar文件所在的目录)
-                // <p>
-                // 在进行加密时,某些类可能会因为缺失必要的依赖类而导致加密失败。就可以通过指定此字段的值(值应为某个jar或者某个目录的全路径),
-                // 这样一来,class-winter混淆目标jar时,除了加载要加载的jar/war内部的所有jar外,还会额外加载这里指定的jar(或者这里指定的目录下的所有子孙jar),
-                // 进而保证在加密时,不会因为确实依赖类而加密失败。
-                // <p>
-                // 注: 某些项目在打jar包时,是没有把其依赖的lib打进jar包中的,所以会出现[某些类可能会因为缺失必要的依赖类而导致加密失败]的情况。
-                // <p>
-                // 示例说明:
-                // 假设加密时日志报warn说
-                //     2021-06-11 20:24:31 [ WARN] winter.com.ideaaedi.classwinter.executor.EncryptExecutor: Ignore clear-method-body for  className [com.aspire.ssm.handler.impl.DefaultAesPreHandlerImpl], Cannot find 'org.apache.ibatis.executor.parameter.ParameterHandler'
-                //     2021-06-11 20:24:31 [ WARN] winter.com.ideaaedi.classwinter.executor.EncryptExecutor: Ignore clear-method-body for className [com.aspire.ssm.interceptor.CustomizeMybatisPlugin], Cannot find 'org.apache.ibatis.plugin.Invocation'
-                // 这说明了
-                //     DefaultAesPreHandlerImpl类中使用到了org.apache.ibatis.executor.parameter.ParameterHandler类,
-                //     DCustomizeMybatisPlugin类中使用到了org.apache.ibatis.plugin.Invocation类,
-                // 进一步说明了
-                //     要加密的jar包没有把mybatis的lib包打进去。
-                // 这时,我们就可以通过指定此字段的值为mybatisjar包的全路径名(如/tmp/lib/mybatis-3.5.1.jar)来解决问题。
-                // .supportFile("D:/tmp/jackson-databind-2.10.4.jar")
-                
-                // (可选)-> 是否开启debug模型以获取更多日执行信息(默认为false)
-                .debug(true)
-                
-                .build();
-        return encryptExecutor.process();
+        String javaagentArgs = "=debug=true,password=" + password;
+        BashUtil.runBashAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
     }
 }

+ 14 - 22
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/AlreadyProtectedLibs_Test.java

@@ -1,7 +1,6 @@
 package winter.com.ideaaedi.classwinter;
 
 import winter.com.ideaaedi.classwinter.author.JustryDeng;
-import winter.com.ideaaedi.classwinter.executor.EncryptExecutor;
 import winter.com.ideaaedi.classwinter.util.BashUtil;
 import winter.com.ideaaedi.classwinter.util.Constant;
 import winter.com.ideaaedi.classwinter.util.PathUtil;
@@ -21,7 +20,7 @@ public class AlreadyProtectedLibs_Test {
         
 //        test0();
 //        test1();
-        test2();
+//        test2();
     }
     
     /**
@@ -44,7 +43,7 @@ public class AlreadyProtectedLibs_Test {
         String originJarOrWar = projectRootDir + "my-project-with-encrypted-lib-no"
                 + "-pwd.jar";
         // 启动
-        BashUtil.runCmdAndPrint(String.format("java -jar %s", originJarOrWar));
+        BashUtil.runBashAndPrint(String.format("java -jar %s", originJarOrWar));
 
     }
     
@@ -65,30 +64,25 @@ public class AlreadyProtectedLibs_Test {
      */
     private static void test1() {
         String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
-        // 加密(模拟命令行输入对jar包进行加密)
         String originJarOrWar = projectRootDir + Constant.LINUX_FILE_SEPARATOR + "my-project-with-encrypted-lib-no-pwd.jar";
         String includePrefix = "non-exist";
         String alreadyProtectedLibs = "encrypted-lib-no-pwd-1.0.0.jar";
-        
-        String startBat = "java -jar class-winter-core.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-1.0.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " alreadyProtectedLibs=" + alreadyProtectedLibs
                 + " debug=" + true
                 ;
-        
-        String[] args = startBat.replace("java -jar class-winter-core.jar" , "").trim().split(" ");
-        Forward.main(args);
-        
+        // 加密
+        BashUtil.runBashAndPrint(startBat);
     
-        
         String encryptedJar = originJarOrWar.replace(".jar", "-encrypted.jar");
         
-        // 解密(模拟启动加密后的jar包)
+        // 解密
         // String javaagentArgs = "";
         String javaagentArgs = "=debug=true";
         // String javaagentArgs = "=debug=true,password=xxx";
-        BashUtil.runCmdAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
+        BashUtil.runBashAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
     }
     
     /**
@@ -111,29 +105,27 @@ public class AlreadyProtectedLibs_Test {
      */
     private static void test2() {
         String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
-        // 加密(模拟命令行输入对jar包进行加密)
+        // 加密
         String originJarOrWar = projectRootDir + "my-project-with-encrypted-lib-have-pwd.jar";
         String includePrefix = "non-exist";
         String alreadyProtectedLibs = "encrypted-lib-have-pwd-1.0.0.jar:qwer123~";
     
-        String startBat = "java -jar class-winter-core.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-1.0.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " alreadyProtectedLibs=" + alreadyProtectedLibs
                 + " debug=" + true
                 ;
-    
-        String[] args = startBat.replace("java -jar class-winter-core.jar" , "").trim().split(" ");
-        Forward.main(args);
-    
-    
+        // 加密
+        BashUtil.runBashAndPrint(startBat);
     
         String encryptedJar = originJarOrWar.replace(".jar", "-encrypted.jar");
     
-        // 解密(模拟启动加密后的jar包)
+    
+        // 解密
         // String javaagentArgs = "";
         String javaagentArgs = "=debug=true";
         // String javaagentArgs = "=debug=true,password=xxx";
-        BashUtil.runCmdAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
+        BashUtil.runBashAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
     }
 }

+ 13 - 21
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/Debug_Test.java

@@ -1,13 +1,9 @@
 package winter.com.ideaaedi.classwinter;
 
 import winter.com.ideaaedi.classwinter.author.JustryDeng;
-import winter.com.ideaaedi.classwinter.executor.EncryptExecutor;
 import winter.com.ideaaedi.classwinter.util.BashUtil;
-import winter.com.ideaaedi.classwinter.util.Constant;
 import winter.com.ideaaedi.classwinter.util.PathUtil;
 
-import java.util.concurrent.TimeUnit;
-
 /**
  * 测试debug
  * <p>
@@ -23,8 +19,8 @@ public class Debug_Test {
         // 杀下进程(以保证端口没有被占用)
         BashUtil.killProcessByPorts("8080");
         
-//        test0();
-        test1();
+        test0();
+//        test1();
     
     }
     
@@ -36,27 +32,25 @@ public class Debug_Test {
      */
     private static void test0() {
         String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
-        // 加密(模拟命令行输入对jar包进行加密)
+        // 加密
         String originJarOrWar = projectRootDir + "boot-jar.jar";
         String includePrefix = "com";
         
-        String startBat = "java -jar class-winter-core.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-1.0.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 ;
-        
-        String[] args = startBat.replace("java -jar class-winter-core.jar" , "").trim().split(" ");
-        Forward.main(args);
-        
+        // 加密
+        BashUtil.runBashAndPrint(startBat);
         
         
         String encryptedJar = originJarOrWar.replace(".jar", "-encrypted.jar");
         
-        // 解密(模拟启动加密后的jar包)
+        // 解密
         String javaagentArgs = "";
         // String javaagentArgs = "=debug=true";
         // String javaagentArgs = "=debug=true,password=xxx";
-        BashUtil.runCmdAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
+        BashUtil.runBashAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
     }
     
     /**
@@ -67,27 +61,25 @@ public class Debug_Test {
      */
     private static void test1() {
         String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
-        // 加密(模拟命令行输入对jar包进行加密)
         String originJarOrWar = projectRootDir + "boot-jar.jar";
         String includePrefix = "com";
     
-        String startBat = "java -jar class-winter-core.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-1.0.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " debug=" + true
                 ;
-        
-        String[] args = startBat.replace("java -jar class-winter-core.jar" , "").trim().split(" ");
-        Forward.main(args);
+        // 加密
+        BashUtil.runBashAndPrint(startBat);
         
         
         
         String encryptedJar = originJarOrWar.replace(".jar", "-encrypted.jar");
         
-        // 解密(模拟启动加密后的jar包)
+        // 解密
         // String javaagentArgs = "";
         String javaagentArgs = "=debug=true";
         // String javaagentArgs = "=debug=true,password=xxx";
-        BashUtil.runCmdAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
+        BashUtil.runBashAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
     }
 }

+ 12 - 17
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/ExcludePrefix_Test.java

@@ -2,7 +2,6 @@ package winter.com.ideaaedi.classwinter;
 
 import winter.com.ideaaedi.classwinter.author.JustryDeng;
 import winter.com.ideaaedi.classwinter.util.BashUtil;
-import winter.com.ideaaedi.classwinter.util.Constant;
 import winter.com.ideaaedi.classwinter.util.PathUtil;
 
 /**
@@ -18,8 +17,8 @@ public class ExcludePrefix_Test {
     public static void main(String[] args) {
         // 杀下进程(以保证端口没有被占用)
         BashUtil.killProcessByPorts("8080");
-        test0();
-//        test1();
+//        test0();
+        test1();
     }
     
     /**
@@ -36,27 +35,25 @@ public class ExcludePrefix_Test {
      */
     public static void test0() {
         String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
-        // 加密(模拟命令行输入对jar包进行加密)
         String originJarOrWar = projectRootDir + "boot-jar.jar";
         String includePrefix = "com.aspire.ssm.util.AesEncryptDecryptUtil,com.aspire.ssm.util.DbSecurityBeanUtil";
         
-        String startBat = "java -jar class-winter-core.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-1.0.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " debug=" + true
                 ;
-        
-        String[] args = startBat.replace("java -jar class-winter-core.jar" , "").trim().split(" ");
-        Forward.main(args);
+        // 加密
+        BashUtil.runBashAndPrint(startBat);
         
         
         String encryptedJar = originJarOrWar.replace(".jar", "-encrypted.jar");
         
-        // 解密(模拟启动加密后的jar包)
+        // 解密
         // String javaagentArgs = "";
         String javaagentArgs = "=debug=true";
         // String javaagentArgs = "=debug=true,password=xxx";
-        BashUtil.runCmdAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
+        BashUtil.runBashAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
     }
     
     /**
@@ -71,29 +68,27 @@ public class ExcludePrefix_Test {
      */
     public static void test1() {
         String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
-        // 加密(模拟命令行输入对jar包进行加密)
         String originJarOrWar = projectRootDir + "boot-jar.jar";
         String includePrefix = "com.aspire.ssm.util.AesEncryptDecryptUtil,com.aspire.ssm.util.DbSecurityBeanUtil";
         String excludePrefix = "com.aspire.ssm.util.DbSecurityBeanUtil";
     
-        String startBat = "java -jar class-winter-core.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-1.0.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " excludePrefix=" + excludePrefix
                 + " debug=" + true
                 ;
-    
-        String[] args = startBat.replace("java -jar class-winter-core.jar" , "").trim().split(" ");
-        Forward.main(args);
+        // 加密
+        BashUtil.runBashAndPrint(startBat);
     
     
     
         String encryptedJar = originJarOrWar.replace(".jar", "-encrypted.jar");
     
-        // 解密(模拟启动加密后的jar包)
+        // 解密
         // String javaagentArgs = "";
         String javaagentArgs = "=debug=true";
         // String javaagentArgs = "=debug=true,password=xxx";
-        BashUtil.runCmdAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
+        BashUtil.runBashAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
     }
 }

+ 5 - 11
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/FinalName_Test.java

@@ -1,13 +1,9 @@
 package winter.com.ideaaedi.classwinter;
 
 import winter.com.ideaaedi.classwinter.author.JustryDeng;
-import winter.com.ideaaedi.classwinter.executor.EncryptExecutor;
 import winter.com.ideaaedi.classwinter.util.BashUtil;
-import winter.com.ideaaedi.classwinter.util.Constant;
 import winter.com.ideaaedi.classwinter.util.PathUtil;
 
-import java.util.concurrent.TimeUnit;
-
 /**
  * 测试finalName
  * <p>
@@ -23,28 +19,26 @@ public class FinalName_Test {
         BashUtil.killProcessByPorts("8080");
         
         String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
-        // 加密(模拟命令行输入对jar包进行加密)
         String originJarOrWar = projectRootDir + "boot-jar.jar";
         String includePrefix = "com";
         String finalName = "YiYaKaKa";
     
-        String startBat = "java -jar class-winter-core.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-1.0.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " finalName=" + finalName
                 ;
-    
-        args = startBat.replace("java -jar class-winter-core.jar" , "").trim().split(" ");
-        Forward.main(args);
+        // 加密
+        BashUtil.runBashAndPrint(startBat);
     
     
     
         String encryptedJar = projectRootDir + finalName + ".jar";
     
-        // 解密(模拟启动加密后的jar包)
+        // 解密
         String javaagentArgs = "";
         // String javaagentArgs = "=debug=true";
         // String javaagentArgs = "=debug=true,password=xxx";
-        BashUtil.runCmdAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
+        BashUtil.runBashAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
     }
 }

+ 5 - 11
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/IncludeLibs_Test.java

@@ -1,13 +1,9 @@
 package winter.com.ideaaedi.classwinter;
 
 import winter.com.ideaaedi.classwinter.author.JustryDeng;
-import winter.com.ideaaedi.classwinter.executor.EncryptExecutor;
 import winter.com.ideaaedi.classwinter.util.BashUtil;
-import winter.com.ideaaedi.classwinter.util.Constant;
 import winter.com.ideaaedi.classwinter.util.PathUtil;
 
-import java.util.concurrent.TimeUnit;
-
 /**
  * 测试includeLibs
  * <p>
@@ -42,29 +38,27 @@ public class IncludeLibs_Test {
         BashUtil.killProcessByPorts("8080");
     
         String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
-        // 加密(模拟命令行输入对jar包进行加密)
         String originJarOrWar = projectRootDir + "boot-jar.jar";
         String includePrefix = "org.springframework.aop.target.dynamic,com.google.common.xml";
         String includeLibs = "spring-aop-5.1.8.RELEASE.jar,guava-28.2-jre.jar";
     
-        String startBat = "java -jar class-winter-core.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-1.0.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " includeLibs=" + includeLibs
                 + " debug=" + true
                 ;
-    
-        args = startBat.replace("java -jar class-winter-core.jar" , "").trim().split(" ");
-        Forward.main(args);
+        // 加密
+        BashUtil.runBashAndPrint(startBat);
     
     
     
         String encryptedJar = originJarOrWar.replace(".jar", "-encrypted.jar");
     
-        // 解密(模拟启动加密后的jar包)
+        // 解密
         String javaagentArgs = "";
         // String javaagentArgs = "=debug=true";
         // String javaagentArgs = "=debug=true,password=xxx";
-        BashUtil.runCmdAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
+        BashUtil.runBashAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
     }
 }

+ 5 - 11
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/IncludePrefix_Test.java

@@ -1,13 +1,9 @@
 package winter.com.ideaaedi.classwinter;
 
 import winter.com.ideaaedi.classwinter.author.JustryDeng;
-import winter.com.ideaaedi.classwinter.executor.EncryptExecutor;
 import winter.com.ideaaedi.classwinter.util.BashUtil;
-import winter.com.ideaaedi.classwinter.util.Constant;
 import winter.com.ideaaedi.classwinter.util.PathUtil;
 
-import java.util.concurrent.TimeUnit;
-
 /**
  * 测试includePrefix
  * <p>
@@ -40,26 +36,24 @@ public class IncludePrefix_Test {
         // 杀下进程(以保证端口没有被占用)
         BashUtil.killProcessByPorts("8080");
         String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
-        // 加密(模拟命令行输入对jar包进行加密)
         String originJarOrWar = projectRootDir + "boot-jar.jar";
         String includePrefix = "com.aspire.ssm.util";
     
-        String startBat = "java -jar class-winter-core.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-1.0.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " debug=" + true
                 ;
-    
-        args = startBat.replace("java -jar class-winter-core.jar" , "").trim().split(" ");
-        Forward.main(args);
+        // 加密
+        BashUtil.runBashAndPrint(startBat);
     
     
         String encryptedJar = originJarOrWar.replace(".jar", "-encrypted.jar");
     
-        // 解密(模拟启动加密后的jar包)
+        // 解密
         // String javaagentArgs = "";
         String javaagentArgs = "=debug=true";
         // String javaagentArgs = "=debug=true,password=xxx";
-        BashUtil.runCmdAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
+        BashUtil.runBashAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
     }
 }

+ 14 - 20
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/OriginJarOrWar_Test.java

@@ -1,13 +1,9 @@
 package winter.com.ideaaedi.classwinter;
 
 import winter.com.ideaaedi.classwinter.author.JustryDeng;
-import winter.com.ideaaedi.classwinter.executor.EncryptExecutor;
 import winter.com.ideaaedi.classwinter.util.BashUtil;
-import winter.com.ideaaedi.classwinter.util.Constant;
 import winter.com.ideaaedi.classwinter.util.PathUtil;
 
-import java.util.concurrent.TimeUnit;
-
 /**
  * 测试originJarOrWar
  * <p>
@@ -22,8 +18,10 @@ public class OriginJarOrWar_Test {
         // 杀下进程(以保证端口没有被占用)
         BashUtil.killProcessByPorts("8080");
         
-        test0();
-//        test1();
+        // 出错了,idea控制台没有输出, 如果直接用命令行执行指令的话,能看到错误信息的
+//        test0();
+        
+        test1();
     }
     
     /**
@@ -31,27 +29,25 @@ public class OriginJarOrWar_Test {
      */
     private static void test0() {
         String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
-        // 加密(模拟命令行输入对jar包进行加密)
         String originJarOrWar = projectRootDir + "non-exist.jar";
         String includePrefix = "com.aspire.ssm.util";
     
-        String startBat = "java -jar class-winter-core.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-1.0.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " debug=" + true
                 ;
-    
-        String[] args = startBat.replace("java -jar class-winter-core.jar" , "").trim().split(" ");
-        Forward.main(args);
+        // 加密
+        BashUtil.runBashAndPrint(startBat);
     
     
         String encryptedJar = originJarOrWar.replace(".jar", "-encrypted.jar");
     
-        // 解密(模拟启动加密后的jar包)
+        // 解密
         // String javaagentArgs = "";
         String javaagentArgs = "=debug=true";
         // String javaagentArgs = "=debug=true,password=xxx";
-        BashUtil.runCmdAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
+        BashUtil.runBashAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
     }
     
     /**
@@ -59,26 +55,24 @@ public class OriginJarOrWar_Test {
      */
     private static void test1() {
         String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
-        // 加密(模拟命令行输入对jar包进行加密)
         String originJarOrWar = projectRootDir + "boot-jar.jar";
         String includePrefix = "com.aspire.ssm.util";
     
-        String startBat = "java -jar class-winter-core.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-1.0.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " debug=" + true
                 ;
-    
-        String[] args = startBat.replace("java -jar class-winter-core.jar" , "").trim().split(" ");
-        Forward.main(args);
+        // 加密
+        BashUtil.runBashAndPrint(startBat);
     
     
         String encryptedJar = originJarOrWar.replace(".jar", "-encrypted.jar");
     
-        // 解密(模拟启动加密后的jar包)
+        // 解密
         // String javaagentArgs = "";
         String javaagentArgs = "=debug=true";
         // String javaagentArgs = "=debug=true,password=xxx";
-        BashUtil.runCmdAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
+        BashUtil.runBashAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
     }
 }

+ 8 - 20
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/SupportFile_Test.java

@@ -1,13 +1,9 @@
 package winter.com.ideaaedi.classwinter;
 
 import winter.com.ideaaedi.classwinter.author.JustryDeng;
-import winter.com.ideaaedi.classwinter.executor.EncryptExecutor;
 import winter.com.ideaaedi.classwinter.util.BashUtil;
-import winter.com.ideaaedi.classwinter.util.Constant;
 import winter.com.ideaaedi.classwinter.util.PathUtil;
 
-import java.util.concurrent.TimeUnit;
-
 /**
  * 测试supportFile
  * <p>
@@ -28,8 +24,8 @@ public class SupportFile_Test {
         // 杀下进程(以保证端口没有被占用)
         BashUtil.killProcessByPorts("8080");
     
-//        test0();
-        test1();
+        test0();
+//        test1();
     }
     
     /**
@@ -42,22 +38,16 @@ public class SupportFile_Test {
      * 2021-06-13 16:39:12 [ WARN] winter.com.ideaaedi.classwinter.executor.EncryptExecutor: Ignore clear-method-body for className [com.aspire.ssm.SsmApplication], Cannot find 'org.springframework.boot.ApplicationArguments'
      */
     private static void test0() {
-        String[] args;
         String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
-        // 加密(模拟命令行输入对jar包进行加密)
         String originJarOrWar = projectRootDir + "normal-jar.jar";
         String includePrefix = "com";
-        String supportFile = "E:\\Maven\\Repository\\org\\springframework\\boot\\spring-boot\\2.2.8.RELEASE\\spring-boot-2.2.8.RELEASE.jar"
-                      + ","
-                      +"";
         
-        String startBat = "java -jar class-winter-core.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-1.0.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 ;
-        
-        args = startBat.replace("java -jar class-winter-core.jar" , "").trim().split(" ");
-        Forward.main(args);
+        // 加密
+        BashUtil.runBashAndPrint(startBat);
     }
     
     /**
@@ -66,20 +56,18 @@ public class SupportFile_Test {
      * 日志没有warn提示说混淆失败,同时反编译混淆后的jar包进行观察也会发现是成功了的
      */
     private static void test1() {
-        String[] args;
         String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
         // 加密(模拟命令行输入对jar包进行加密)
         String originJarOrWar = projectRootDir + "normal-jar.jar";
         String includePrefix = "com";
         String supportFile = projectRootDir + "help";
         
-        String startBat = "java -jar class-winter-core.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-1.0.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " supportFile=" + supportFile
                 ;
-        
-        args = startBat.replace("java -jar class-winter-core.jar" , "").trim().split(" ");
-        Forward.main(args);
+        // 加密
+        BashUtil.runBashAndPrint(startBat);
     }
 }

+ 12 - 16
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/Tips_Test.java

@@ -19,8 +19,8 @@ public class Tips_Test {
     public static void main(String[] args) {
         // 杀下进程(以保证端口没有被占用)
         BashUtil.killProcessByPorts("8080");
-//        test0();
-        test1();
+        test0();
+//        test1();
     }
     
     /**
@@ -32,19 +32,17 @@ public class Tips_Test {
         String originJarOrWar = projectRootDir + "boot-jar.jar";
         String includePrefix = "com";
     
-        String startBat = "java -jar class-winter-core.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-1.0.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 ;
-    
-        String[] args = startBat.replace("java -jar class-winter-core.jar" , "").trim().split(" ");
-        Forward.main(args);
+        BashUtil.runBashAndPrint(startBat);
     
     
         String encryptedJar = originJarOrWar.replace(".jar", "-encrypted.jar");
     
         // 直接使用混淆后的jar
-        BashUtil.runCmdAndPrint(String.format("java -jar %s", encryptedJar));
+        BashUtil.runBashAndPrint(String.format("java -jar %s", encryptedJar));
     }
     
     /**
@@ -52,24 +50,22 @@ public class Tips_Test {
      */
     public static void test1() {
         String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
-        // 加密(模拟命令行输入对jar包进行加密)
         String originJarOrWar = projectRootDir + "boot-jar.jar";
         String includePrefix = "com";
         String tips = "[潘嘎之交] 潘: 你别怪潘叔说话比较直白, 网络上的东西都是虚拟的, 你把握不住, 孩子! 因为这里的水很深...";
     
         // 如果tips值由一些特殊字符(如空格等)的话,可以用windows双引号(linux单引号)引起来。
         // java -jar class-winter-core-1.0.0.jar originJarOrWar=/boot-jar.jar includePrefix=com tips="[潘嘎之交] 潘: 你别怪潘叔说话比较直白, 网络上的东西都是虚拟的, 你把握不住, 孩子! 因为这里的水很深..."
-        String[] args = {
-                "originJarOrWar=" + originJarOrWar,
-                "includePrefix=" + includePrefix,
-                "tips=" + tips
-        };
-        Forward.main(args);
-    
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-1.0.0.jar"
+                + " originJarOrWar=" + originJarOrWar
+                + " includePrefix=" + includePrefix
+                + " tips=" + (BashUtil.IS_WINDOWS ? "\"".concat(tips).concat("\"") : "'".concat(tips).concat("'"));
+                ;
+        BashUtil.runBashAndPrint(startBat);
     
         String encryptedJar = originJarOrWar.replace(".jar", "-encrypted.jar");
     
         // 直接使用混淆后的jar
-        BashUtil.runCmdAndPrint(String.format("java -jar %s", encryptedJar));
+        BashUtil.runBashAndPrint(String.format("java -jar %s", encryptedJar));
     }
 }

+ 42 - 50
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/War_Test.java

@@ -17,10 +17,10 @@ public class War_Test {
         // 杀下进程(以保证端口没有被占用)
         BashUtil.killProcessByPorts("8080");
 //        test0();
-        test1();
+//        test1();
 //        test2();
 //        test3();
-//        test4();
+        test4();
     }
     
     /**
@@ -32,24 +32,22 @@ public class War_Test {
      */
     public static void test0() {
         String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
-        // 加密(模拟命令行输入对jar包进行加密)
         String originJarOrWar = projectRootDir + "war-project.war";
         String includePrefix = "com";
     
-        String startBat = "java -jar class-winter-core.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-1.0.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 ;
-    
-        String[] args = startBat.replace("java -jar class-winter-core.jar" , "").trim().split(" ");
-        Forward.main(args);
+        // 加密
+        BashUtil.runBashAndPrint(startBat);
         
         String encryptedWar = originJarOrWar.replace(".war", "-encrypted.war");
-        System.err.println();
-        System.err.println("请使用web容器(如tomcat)启动war包:" + encryptedWar);
-        System.err.println("其中参数附加 -javaagent:class-winter-core.jar");
-        // System.err.println("其中参数附加 -javaagent:class-winter-core.jar=debug=true,password=pwd123");
-        System.err.println();
+        System.out.println();
+        System.out.println("[加密以完成] 请使用web容器(如tomcat)启动war包:" + encryptedWar);
+        System.out.println("其中参数附加 -javaagent:class-winter-core.jar");
+        // System.out.println("其中参数附加 -javaagent:class-winter-core.jar=debug=true,password=pwd123");
+        System.out.println();
     }
     
     /**
@@ -61,27 +59,25 @@ public class War_Test {
      */
     public static void test1() {
         String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
-        // 加密(模拟命令行输入对jar包进行加密)
         String originJarOrWar = projectRootDir + "my-project-with-normal-lib.war";
         String includePrefix = "com";
         String password = "123456";
     
-        String startBat = "java -jar class-winter-core.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-1.0.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " password=" + password
                 + " debug=" + true
                 ;
-    
-        String[] args = startBat.replace("java -jar class-winter-core.jar" , "").trim().split(" ");
-        Forward.main(args);
+        // 加密
+        BashUtil.runBashAndPrint(startBat);
     
         String encryptedWar = originJarOrWar.replace(".war", "-encrypted.war");
-        System.err.println();
-        System.err.println("请使用web容器(如tomcat)启动war包:" + encryptedWar);
-        System.err.println("其中参数附加 -javaagent:class-winter-core.jar=password=" + password);
-        // System.err.println("其中参数附加 -javaagent:class-winter-core.jar=debug=true,password=pwd123");
-        System.err.println();
+        System.out.println();
+        System.out.println("[加密以完成] 请使用web容器(如tomcat)启动war包:" + encryptedWar);
+        System.out.println("其中参数附加 -javaagent:class-winter-core.jar=password=" + password);
+        // System.out.println("其中参数附加 -javaagent:class-winter-core.jar=debug=true,password=pwd123");
+        System.out.println();
     }
     
     /**
@@ -93,28 +89,26 @@ public class War_Test {
      */
     public static void test2() {
         String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
-        // 加密(模拟命令行输入对jar包进行加密)
         String originJarOrWar = projectRootDir + "my-project-with-encrypted-lib-no-pwd.war";
         String includePrefix = "com";
-        String alreadyProtectedLibs = "encrypted-lib-no-pwd-1.0.0.jar";
+        String alreadyProtectedLibs = "encrypted-lib-no-pwd.jar";
         String password = "oop857857";
     
-        String startBat = "java -jar class-winter-core.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-1.0.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " alreadyProtectedLibs=" + alreadyProtectedLibs
                 + " password=" + password
                 ;
-    
-        String[] args = startBat.replace("java -jar class-winter-core.jar" , "").trim().split(" ");
-        Forward.main(args);
+        // 加密
+        BashUtil.runBashAndPrint(startBat);
     
         String encryptedWar = originJarOrWar.replace(".war", "-encrypted.war");
-        System.err.println();
-        System.err.println("请使用web容器(如tomcat)启动war包:" + encryptedWar);
-        System.err.println("其中参数附加 -javaagent:class-winter-core.jar=password=" + password);
-        // System.err.println("其中参数附加 -javaagent:class-winter-core.jar=debug=true,password=pwd123");
-        System.err.println();
+        System.out.println();
+        System.out.println("[加密以完成] 请使用web容器(如tomcat)启动war包:" + encryptedWar);
+        System.out.println("其中参数附加 -javaagent:class-winter-core.jar=password=" + password);
+        // System.out.println("其中参数附加 -javaagent:class-winter-core.jar=debug=true,password=pwd123");
+        System.out.println();
     }
     
     /**
@@ -126,28 +120,26 @@ public class War_Test {
      */
     public static void test3() {
         String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
-        // 加密(模拟命令行输入对jar包进行加密)
         String originJarOrWar = projectRootDir + "my-project-with-encrypted-lib-have-pwd.war";
         String includePrefix = "com";
-        String alreadyProtectedLibs = "encrypted-lib-have-pwd-1.0.0.jar:qwer123~";
+        String alreadyProtectedLibs = "encrypted-lib-have-pwd.jar:qwer123~";
         String password = "yiyakaka";
         
-        String startBat = "java -jar class-winter-core.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-1.0.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " alreadyProtectedLibs=" + alreadyProtectedLibs
                 + " password=" + password
                 ;
-    
-        String[] args = startBat.replace("java -jar class-winter-core.jar" , "").trim().split(" ");
-        Forward.main(args);
+        // 加密
+        BashUtil.runBashAndPrint(startBat);
     
         String encryptedWar = originJarOrWar.replace(".war", "-encrypted.war");
-        System.err.println();
-        System.err.println("请使用web容器(如tomcat)启动war包:" + encryptedWar);
-        System.err.println("其中参数附加 -javaagent:class-winter-core.jar=password=" + password);
-        // System.err.println("其中参数附加 -javaagent:class-winter-core.jar=debug=true,password=pwd123");
-        System.err.println();
+        System.out.println();
+        System.out.println("[加密以完成] 请使用web容器(如tomcat)启动war包:" + encryptedWar);
+        System.out.println("其中参数附加 -javaagent:class-winter-core.jar=password=" + password);
+        // System.out.println("其中参数附加 -javaagent:class-winter-core.jar=debug=true,password=pwd123");
+        System.out.println();
     }
     
     /**
@@ -167,14 +159,14 @@ public class War_Test {
                 .password("pwd12345")
                 .includeLibs("spring-aop-5.2.7.RELEASE.jar,jackson-core-2.10.4.jar")
                 .tips("方法已经被class-winter加密保护了,请不要直接使用java -jar xxx.jar启动项目,请使用java -javaagent:xxx.jar -jar xxx.jar启动项目.")
-                .alreadyProtectedLibs("encrypted-lib-have-pwd-1.0.0.jar:qwer123~")
+                .alreadyProtectedLibs("encrypted-lib-have-pwd.jar:qwer123~")
                 .build();
         
         String encryptedWar = encryptExecutor.process();
-        System.err.println();
-        System.err.println("请使用web容器(如tomcat)启动war包:" + encryptedWar);
-        System.err.println("其中参数附加 -javaagent:class-winter-core.jar=password=pwd12345");
-        // System.err.println("其中参数附加 -javaagent:class-winter-core.jar=debug=true,password=pwd123");
-        System.err.println();
+        System.out.println();
+        System.out.println("[加密以完成] 请使用web容器(如tomcat)启动war包:" + encryptedWar);
+        System.out.println("其中参数附加 -javaagent:class-winter-core.jar=password=pwd12345");
+        // System.out.println("其中参数附加 -javaagent:class-winter-core.jar=debug=true,password=pwd123");
+        System.out.println();
     }
 }

BIN
class-winter-core/src/test/resources/class-winter-core-1.0.0.jar


BIN
class-winter-core/src/test/resources/my-project-with-encrypted-lib-have-pwd.war


BIN
class-winter-core/src/test/resources/my-project-with-encrypted-lib-no-pwd.war


BIN
class-winter-core/src/test/resources/my-project-with-normal-lib.jar


BIN
class-winter-core/src/test/resources/my-project-with-normal-lib.war


+ 3 - 0
class-winter-maven-plugin/src/main/java/winter/com/ideaaedi/classwinter/plugin/ClassWinterPlugin.java

@@ -18,6 +18,8 @@ import java.io.File;
 /**
  * 加密jar/war文件的maven插件
  *
+ * todo 查件执行顺序
+ *
  * @author JustryDeng
  */
 @SuppressWarnings("unused")
@@ -67,6 +69,7 @@ public class ClassWinterPlugin extends AbstractMojo {
         Logger.debug(Forward.class, "You config arg includePrefix -> " + includePrefix);
         Logger.debug(Forward.class, "You config arg excludePrefix -> " + excludePrefix);
         Logger.debug(Forward.class, "You config arg finalName -> " + finalName);
+        Logger.debug(Forward.class, "You config arg password -> " + password);
         Logger.debug(Forward.class, "You config arg includeLibs -> " + includeLibs);
         Logger.debug(Forward.class, "You config arg alreadyProtectedLibs -> " + alreadyProtectedLibs);
         Logger.debug(Forward.class, "You config arg tips -> " + tips);