我准备好使用.jar文件并想知道是否可以提取和重命名包?
所以通常我用:
启动.jar文件java -cp myFile.jar com.codehelper.demo.Main
我想将其中的“codehelper”重命名为不同于我可以通过
运行它的东西java -cp myFile.jar com.NEW_NAME.demo.Main
我试图反编译所有文件,将其添加到文件夹结构并重命名为“codehelper”路径并再次编译但它没有用。我还重命名了每个文件中包含的所有包,如
import com.codehelper...
我的目标是无法到达的,还是我可以这样做?如果有人能解释我该怎么做,那就太好了。
谢谢你和我可怜的英语
编辑:似乎唯一无法编译的文件是包含此切换案例的文件。
private int priotiryLevel(DiscoveryInfoBehave info)
{
int ret = 0;
switch (1.$SwitchMap$com$peerialism$natcracker$common$GatewayDevice$GatewayType[info.getNatDevice().getGatewayType().ordinal()])
{
case 1:
ret = 0;
break;
case 2:
ret = 4;
break;
case 3:
ret = 5;
break;
}
return ret;
}
我还尝试重命名此开关盒内的特定单词但不费力。
答案 0 :(得分:0)
编写一个新的包装类:
package com.NEW_NAME.demo;
public class Main
{
public static void main(String[] args)
{
com.codehelper.demo.Main.main(args);
}
}
编译并将其添加到jar中。您现在可以将其调用为:
java -cp myFile.jar com.NEW_NAME.demo.Main
它将默默地发送到真正的实现。
答案 1 :(得分:0)
一般情况下这是不可能的。如果重命名某些文件,Java将无法找到它们(公共类名称必须与文件名相同)。您可以使用主类重命名文件,并在其答案中将其命名为@Joe建议。但如果你重命名其他东西,它将停止工作。代码中可能有这些类的cals。同样适用于" codehelper"名称。您无法从代码中删除它。即使您从一个文件中删除它,任何人仍然可以在代码中的其他位置看到它。
重命名目录与重命名文件相同。您销毁命名空间(包)并且代码将不再起作用,因为在内部类中,使用此包。此外,无需在代码中导入,因为您可以直接从执行代码中调用com.package-name.class。通过重命名包,你将破坏它,程序将崩溃。它可能会运行一段时间,但一旦程序到达此调用,它就会崩溃。
所以这个
import com.codehelper...
即使代码使用的是代码,也不是必需的。你可以直接写
com.codehelper.*** xy = new com.codehelper.***();
即使您重命名代码中的所有内容,您仍然无法保证功能。代码可能正在使用反射并从sting代码创建类实例。例如,见:
在评论栏下:
做一些反编译 - >编译工作,似乎是代码窃取,如果你不愿意支付许可证而你想隐藏它。
再加上这样的事情,这总是一种不好的做法。我没有看到任何真正的用途。