【问题标题】:Java JAR file can't find classJava JAR 文件找不到类
【发布时间】:2019-09-25 23:38:48
【问题描述】:

我有以下代码:

package deerangle;

public class Renamer implements org.jetbrains.java.decompiler.main.extern.IIdentifierRenamer {

    public static void main(String[] args) {
        System.out.println("HEY");
    }

    public long counter = 0;

    public boolean toBeRenamed(Type elementType, String className, String element, String descriptor) {
        return !(elementType == Type.ELEMENT_CLASS && className.length() < 4);
    }

    public String getNextClassName(String fullName, String shortName) {
        return "Class" + ++counter;
    }

    public String getNextFieldName(String className, String field, String descriptor) {
        return "field" + className + "C" + ++counter;
    }

    public String getNextMethodName(String className, String method, String descriptor) {
        return "method" + className + "C" + ++counter;
    }

}

此文件 Renamer.java 位于文件夹 deerangle 中。

首先,我运行javac deerangle/Renamer.java

然后我运行jar cvf Renamer.jar deerangle/Renamer.class

这将创建一个包含我的类文件的 jar 文件。

当我现在运行 java -cp Renamer.jar deerangle.Renamer 时,它会说: Error: Could not find or load main class deerangle.Renamer

我认为这并不重要,但这是我在代码中实现的类:

// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.java.decompiler.main.extern;

public interface IIdentifierRenamer {

  enum Type {ELEMENT_CLASS, ELEMENT_FIELD, ELEMENT_METHOD}

  boolean toBeRenamed(Type elementType, String className, String element, String descriptor);

  String getNextClassName(String fullName, String shortName);

  String getNextFieldName(String className, String field, String descriptor);

  String getNextMethodName(String className, String method, String descriptor);
}

为什么我会收到错误消息?我做错了什么?

【问题讨论】:

    标签: java jar


    【解决方案1】:

    如果我取出您指定的 interface 并按照您的所有步骤操作,一切正常,并且他们的字词 会打印到我的控制台。所以我怀疑这与您的实现有关IIdentifierRenamerinterface,并且您的所有依赖项都是在编译时而不是在运行时找到的。

    一个选项是将所有依赖项打包到jar 文件中,以便在运行时期间可用。

    我建议您为此使用构建工具,例如 Maven to Gradle。

    最近刚刚帮助了一个有类似问题的人,但他们已经“完善”了他们的项目......Error: package does not exist

    【讨论】:

      猜你喜欢
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 2018-06-29
      • 1970-01-01
      • 2020-02-28
      • 2016-05-21
      相关资源
      最近更新 更多