У меня есть файл класса с собственным методом на пути, в то время как его зависимости живут по отдельному пути в другом пакете. Мое дерево выглядит примерно так:
[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 ничего не дает мне, и я получаю ту же ошибку. Я прочитал довольно много подобных вопросов, включая этот высоко оцененный ответ , но не нашел решения, которое работает для меня.