Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将整个文件夹或包从Java转换为Objective-C?_Java_Objective C_J2objc - Fatal编程技术网

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

如何将整个文件夹或包从Java转换为Objective-C?,java,objective-c,j2objc,Java,Objective C,J2objc,我以前使用过Google的Java-to-Objective-C(J2ObjC)转换器的旧版本(即0.5.2版),将整个Java文件文件夹转换为等效的Objective-C文件(并在转换过程中保留目录结构)非常简单。我只需运行以下shell可执行文件: $ ./run.sh —-preservedirs <path to input folder> 如果我有一个名为“input”的文件夹,其中有我的“com”包,其中包含所有要翻译的子包和Java文件,有人能给我提供一个如何翻译整个

我以前使用过Google的Java-to-Objective-C(J2ObjC)转换器的旧版本(即0.5.2版),将整个Java文件文件夹转换为等效的Objective-C文件(并在转换过程中保留目录结构)非常简单。我只需运行以下shell可执行文件:

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

如果我有一个名为“input”的文件夹,其中有我的“com”包,其中包含所有要翻译的子包和Java文件,有人能给我提供一个如何翻译整个包的示例吗?

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

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

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

要构建整个项目,我将源根添加到-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_输出目录中,根据它们的包位于子目录中(就像javac一样)。要将所有.m文件编译到静态库中,我使用:

$ cd build_output
$ j2objcc -c -I. `find . -name '*.m'`
$ libtool -static -o libdagger.a *.o

嗨,安迪,谢谢你的建议。我试试看。你用过谷歌的Java到Objective-C转换器吗?在最新版本中,“run.sh”shell脚本似乎已被“j2objc”unix可执行文件替换。你用过这个吗?从来没有用过,这是一个将多个文件参数传递给脚本的完全通用的解决方案。安迪,我试过你的建议,效果很好。因此,在有人建议用
j2objc
执行此操作的替代方法之前,此命令对我有效:
find input-type f-exec./j2objc-sourcepath input-d output{}。文件夹
input
是我的
com
文件夹中包含要翻译的包/文件的地方,
output
是要编写翻译文件的地方。谢谢你的提示。我想将翻译后的代码添加到iOS应用程序中。这是我应该添加到iOS代码中的
j2objcc
(即Objective-C源文件)的输出,而不是
j2objcc
(即静态库)的输出?忽略上面的注释@tball。我找到了页面和示例项目,并相应地将Java文件添加到我的iOS应用程序中。
$ 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'`
$ cd build_output
$ j2objcc -c -I. `find . -name '*.m'`
$ libtool -static -o libdagger.a *.o