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

Adi*_*ain 3 java objective-c j2objc

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

$ ./run.sh —-preservedirs <path to input folder>
Run Code Online (Sandbox Code Playgroud)

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

$ ./j2objc Hello.java
Run Code Online (Sandbox Code Playgroud)

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

小智 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'`
Run Code Online (Sandbox Code Playgroud)

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

$ cd build_output
$ j2objcc -c -I. `find . -name '*.m'`
$ libtool -static -o libdagger.a *.o
Run Code Online (Sandbox Code Playgroud)