3

我之前使用过 Google 的 Java 到 Objective-C (J2ObjC) 转换器的旧版本(即 0.5.2 版),可以直接将整个 Java 文件文件夹转换为等效的 Objective-C 文件(并保留这样做的目录结构)。我只需要运行以下 shell 可执行文件:

$ ./run.sh —-preservedirs <path to input folder>

我刚刚下载了最新版本的 J2ObjC(即 0.9.1 版),从“入门”页面或其他地方不清楚如何使用“j2obc”翻译整个 Java 文件文件夹,而不仅仅是一个 Java 文件可执行。入门页面中提供的唯一示例是翻译在其他地方没有依赖项/导入的单个 Java 文件,如下所示:

$ ./j2objc Hello.java

任何人都可以为我提供一个如何翻译整个包的示例,假设我有一个名为“input”的文件夹,其中是我的“com”包,其中包含所有要翻译的子包和 Java 文件?

4

2 回答 2

7

为了构建整个项目,我将源根目录添加到 -sourcepath,然后使用 find 命令定位所有 Java 源。例如,构建 Square.com 的 Dagger 库:

$ export J2OBJC=~/j2objc   # change to wherever your distribution is
$ cd ~/src/dagger/core
$ $J2OBJC/j2objc -d build_output -sourcepath src/main/java \
    -classpath $J2OBJC/lib/javax-inject.jar \
    `find src/main/java -name '*.java'`

所有生成的 .h 和 .m 文件现在都在 build_output 目录中,根据它们的包在子目录中(就像 javac 一样)。要将所有 .m 文件编译到静态库中,我使用:

$ cd build_output
$ j2objcc -c -I. `find . -name '*.m'`
$ libtool -static -o libdagger.a *.o
于 2015-03-31T17:40:12.187 回答
2

如果没有内置更好的方法run.sh,您可以使用find's-exec标志:

find <path to input folder> -type f -exec --preservedirs ./run.sh {} \;

或者,您可以使用xargs同一类型执行多个文件:

find <path to input folder> -type f | xargs ./run.sh --preservedirs

-name "*.java"(如果您的目录中有非 Java 文件,您可能还需要添加到 find 参数)。

于 2015-03-31T09:53:28.593 回答