从IDL生成java(避免默认包) 我使用一个大的C++ C++代码库,它有很多IDL文件,所有的类型和常量都声明在任何模块之外。 对于C++,这会导致代码被生成到全局命名空间——丑陋但可以接受。
现在我尝试添加Java客户机来通过CORBA进行连接。但是,对于Java,从IDL生成的类型(使用Sun/Oracle IDL编译器For Java:idlj)位于Java默认包中,因为它们不在IDL模块中。这会导致Java编译错误,因为从默认包导入是非法的 我正在寻找最简单的方法来解决这个问题 我考虑了以下几点:从IDL生成java(避免默认包) 我使用一个大的C++ C++代码库,它有很多IDL文件,所有的类型和常量都声明在任何模块之外。 对于C++,这会导致代码被生成到全局命名空间——丑陋但可以接受。,java,corba,idl,Java,Corba,Idl,现在我尝试添加Java客户机来通过CORBA进行连接。但是,对于Java,从IDL生成的类型(使用Sun/Oracle IDL编译器For Java:idlj)位于Java默认包中,因为它们不在IDL模块中。这会导致Java编译错误,因为从默认包导入是非法的 我正在寻找最简单的方法来解决这个问题 我考虑了以下几点: 在所有类型周围放置模块声明。我目前正在处理这个解决方案,但是它是非常痛苦的,基于受影响的类型的数量和对大的遗留C++代码库的影响。 使用-pkgPrefix或-pkgTranslat
public final class Foo implements org.omg.CORBA.portable.IDLEntity
{
.
.
.
}
- IDL到Java编译器是idlj
- 下面添加了一个示例
- 更新了第#2项(上文),以澄清对每种类型使用-pkgPrefix是不可行的(除非可以合理地编写脚本?)
Foo.idl
struct Foo
{
.
.
.
}
Foo.java: (请注意,未指定任何程序包,这意味着默认程序包):
ClassUsesFoo.java:
package com.sigh;
import Foo; // <-- this is an error
public class ClassUsesFoo
{
private Foo f;
};
package.com;
导入Foo;// 您可以使用选项pkgPrefix和pkgTranslate,如中所示
我想那部分你是对的,但我会详细说明以防万一
例如:
interface T1
{
};
interface T2
{
};
您可以在文件idl.config中删除pkgPrefix配置
PkgPrefix.T1=aaa
PkgPrefix.T2=bbb
跟随命令
idlj -td dir T.idl
在(现有)目录目录目录中创建文件:
dir/
├── aaa
│ ├── T1Helper.java
│ ├── T1Holder.java
│ ├── T1.java
│ ├── T1Operations.java
│ └── _T1Stub.java
└── bbb
├── T2Helper.java
├── T2Holder.java
├── T2.java
├── T2Operations.java
└── _T2Stub.java
要创建配置文件,可以结合使用grep/awk/sed/cut。Q:您使用什么工具从IDL生成Java?标准太阳“idlj”?您能否给出一个具体的例子,说明1)您的命令行(带有“-pkgPrefix”)和2)生成的Java(不起作用)?