我正在使用大型遗留C++代码库,其中包含许多IDL文件,这些文件具有在任何模块之外声明的所有类型和常量.
对于C++,这会导致代码生成到全局命名空间 - 丑陋但可以接受.
现在我正在尝试添加Java客户端以通过CORBA进行连接.但是,对于Java,从IDL生成的类型(使用适用于java的Sun/Oracle IDL编译器:idlj)位于java 默认包中,因为它们不在IDL模块中.这会导致Java编译错误,因为从默认包导入是非法的.
我正在寻找解决问题的最简单方法.
我考虑过以下几点:
我发现如果没有包含所有类型的现有模块,很难相信没有简单的方法强制IDL在Java包中.我希望我只是错过了显而易见的事!
编辑:
例:
Foo.idl
struct Foo
{
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
Foo.java :( 注意没有指定包,这意味着默认包):
public final class Foo implements org.omg.CORBA.portable.IDLEntity
{
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
ClassUsesFoo.java:
package com.sigh;
import Foo; // <-- this is an error
public class ClassUsesFoo
{
private Foo f;
};
Run Code Online (Sandbox Code Playgroud)
小智 2
您可以使用法国网站中所示的选项 pkgPrefix 和 pkgTranslate \n我想您的部分是正确的,但我详细介绍以防万一。
\n\n例子:
\n\ninterface T1\n{\n};\ninterface T2\n{\n};\nRun Code Online (Sandbox Code Playgroud)\n\n您在文件 idl.config 中出了 pkgPrefix 配置
\n\nPkgPrefix.T1=aaa\nPkgPrefix.T2=bbb\nRun Code Online (Sandbox Code Playgroud)\n\n以下命令
\n\nidlj -td dir T.idl\nRun Code Online (Sandbox Code Playgroud)\n\n在(现有)目录 dir 中创建文件:
\n\ndir/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 aaa\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 T1Helper.java\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 T1Holder.java\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 T1.java\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 T1Operations.java\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 _T1Stub.java\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 bbb\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 T2Helper.java\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 T2Holder.java\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 T2.java\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 T2Operations.java\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 _T2Stub.java\nRun Code Online (Sandbox Code Playgroud)\n\n要创建配置文件,可以使用 grep / awk / sed / cut 的组合。
\n| 归档时间: |
|
| 查看次数: |
1819 次 |
| 最近记录: |