【问题标题】:java compile failed where classpath with jar filesjava编译失败,其中带有jar文件的类路径
【发布时间】:2020-07-02 12:03:22
【问题描述】:

目录中有一个名为353.jarjar。我新建了一个 java 类并导入了 353.jar 中的类。

import com.coxier.test.DrawaerLayout;


class Test {
    public static void main(String[] args) {
        DrawaerLayout d = new DrawaerLayout();
    }
}

我用下面的命令编译Test.java

javac -verbose -classpath /Users/coxier/test/app/build/intermediates/transforms/dexBuilder/debug/353.jar:. TestA.java

但这里有一个错误:

error: package com.coxier.test does not exist

编辑 1

感谢@Marquis。我知道这个jar是dex格式的文件。

jar tvf 351.jar

输出是: 1080024 Thu Jul 02 17:52:10 CST 2020 classes.dex

【问题讨论】:

  • JAR 文件in 中有什么?
  • @MarquisofLorne 我使用jadx-gui,我看到 353.jar 中有一个类文件。
  • 你看到什么类文件了吗?在什么路径下?
  • @Raghuveer 谢谢,但这不是我的问题。
  • 哪里说javac 理解包含DEX 文件的JAR 文件?

标签: java javac


【解决方案1】:

javac与android无关。

Android 开发可以使用一种非常类似于 java 但又不完全是 java 的语言来完成。特别是,它周围的所有基础设施,例如编译后的代码,完全是非 Java 的(例如,非面向 Android 的 Java 附带的工具,例如您的 OpenJDK 安装,不知道并且无法阅读任何内容)。

该 jar 文件包含,就 java 本身而言(而 javac 只是 java,而不是 android),绝对没有:它不知道 dex 文件是什么,所以它被忽略了。

如果 jar 文件包含条目,则此代码将起作用:

/com/coxier/test/DrawaerLayout/Test.class

那么,javac -cp thatJar.jar TestA.java 会起作用,假设 TestA.java 在当前工作目录中并且包含:

import com.coxier.test.DrawaerLayout.Test;

public class TestA {
    Test test;
}

如果你有那个 Test.dex 文件的源代码,你可以创建一个类文件,但听起来你需要的是 TestA.java 也可以用 android 工具包编译,大概知道什么 dex文件是,甚至可以在 jar 中接受它们(尽管我记得 jar 也不是 android 做的事情,就像它不“做”类文件一样)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 2016-05-22
    相关资源
    最近更新 更多