我可以重命名现有jar包的包路径吗?

时间:2015-02-14 07:24:08

标签: java

我准备好使用.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;
  }

我还尝试重命名此开关盒内的特定单词但不费力。

2 个答案:

答案 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代码创建类实例。例如,见:

  

Java how to instantiate a class from string


在评论栏下:

做一些反编译 - >编译工作,似乎是代码窃取,如果你不愿意支付许可证而你想隐藏它。

再加上这样的事情,这总是一种不好的做法。我没有看到任何真正的用途。