Java JAR-файл не может найти класс - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть следующий код:

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);
}

Почемуя получаю ошибку?Что я делаю не так?

1 Ответ

1 голос
/ 25 сентября 2019

Если я достану interface, который вы указали, и выполните все ваши шаги, все работает нормально, и они выдают слово HEY на мою консоль.Поэтому я подозреваю, что это связано с IIdentifierRenamer interface вашей реализацией, и что все ваши зависимости находятся во время компиляции , но не во время время выполнения .

Один из вариантов - упаковать все ваши зависимости в файл jar, чтобы они были доступны во время во время выполнения .

Я бы порекомендовал вам использовать сборку.инструмент, такой как Maven для Gradle для этого.

Совсем недавно кто-то помог с подобной проблемой, но он "mavenized" свой проект ... Ошибка: пакет не существует

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...