javah 'Не удалось найти файл класса' для нескольких путей - PullRequest
0 голосов
/ 26 марта 2020

У меня есть файл класса с собственным методом на пути, в то время как его зависимости живут по отдельному пути в другом пакете. Мое дерево выглядит примерно так:

[build/classes]$ tree -L 3    
.
├── main
│   └── com
│       └── foo
└── test
    └── com
        └── foo

Мои зависимости живут по основному пути, в то время как файл класса, для которого я пытаюсь построить заголовок, находится на тестовом пути. Файлы выглядят примерно так:

// FooTest.java: class file will go to build/classes/test/com/foo/
package com.foo;    
import com.foo.bar.Depend;
public class FooTest { 
  private native void baz(int i);
  public FooTest() {
    Depend depend = new Depend();
    baz(depend.get());
  }
}

// Depend.java: class file will go to build/classes/main/com/foo/bar
package com.foo.bar;
public class Depend {
  public int get() { return 3; }
}

Теперь вернемся к build/classes dir. Давайте вызовем нашу команду javah:

[build/classes]$ javah -classpath "test/" com.foo.FooTest
Error: Class com.foo.bar.Depend could not be found.

Черт. Он не мог найти зависимость. Не стоит удивляться: это не на пути! Мы будем использовать разделитель classpath ; для отправки нескольких путей поиска.

[build/classes]$ javah -classpath "test/;main/" com.foo.FooTest
Error: Could not find class file for 'com.foo.FooTest'.

Что? Сейчас он не может найти файл класса в директории test. Отразить порядок путей? Включить многословно? Напишите полный путь?

[build/classes]$ javah -verbose -classpath "main/;test/" com.foo.FooTest
Error: Could not find class file for 'com.foo.FooTest'.
[build/classes]$ javah -verbose -classpath "/the_full_path/main/;/the_full_path/test/" com.foo.FooTest
Error: Could not find class file for 'com.foo.FooTest'.

Взрыв! Я перепробовал все комбинации! Verbose ничего не дает мне, и я получаю ту же ошибку. Я прочитал довольно много подобных вопросов, включая этот высоко оцененный ответ , но не нашел решения, которое работает для меня.

...