如何将整个文件夹或包从 Java 翻译成 Objective-C?

How to translate an entire folder or package from Java to Objective-C?

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

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

我刚刚下载了最新版本的 J2ObjC(即 0.9.1 版),Getting Started page or elsewhere how I can translate an entire folder of Java files rather than just a single Java file using the j2obc executable. The only example provided in the Getting Started 页面上并不清楚是要翻译一个没有依赖关系的 Java 文件还是在其他地方导入如下:

$ ./j2objc Hello.java

假设我有一个名为 input 的文件夹,其中包含我的 com 包,其中包含所有子包和 Java 个我要翻译的文件?

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

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

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

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

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

为了构建整个项目,我将源根目录添加到 -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