如何将整个文件夹或包从Java转换为Objective-C?

时间:2015-03-31 09:51:14

标签: java objective-c j2objc

我之前使用旧版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页面或其他地方不清楚如何翻译整个Java文件夹而不只是使用'j2obc'可执行文件的单个Java文件。 Getting Started页面中提供的唯一示例是翻译单个Java文件,该文件在其他地方没有依赖项/导入,如下所示:

$ ./j2objc Hello.java

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

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

如果run.sh中没有更好的方法,您可以使用find的{​​{1}}标记:

-exec

或者,您可以使用find <path to input folder> -type f -exec --preservedirs ./run.sh {} \; 来执行相同类型的多个文件:

xargs

(如果目录中存在非Java文件,您可能还需要将find <path to input folder> -type f | xargs ./run.sh --preservedirs 添加到查找参数中。