我正在使用一个大型的遗留C++代码库,其中包含许多IDL文件,这些文件具有在任何模块之外声明的所有类型和常量。
对于C++,这将导致生成到全局命名空间的代码--丑陋,但可以接受。
现在,我正在尝试添加Java客户机,以便通过CORBA进行连接。但是,对于Java,从IDL生成的类型(使用Sun/Oracle编译器用于java:idlj)在java默认包中,因为它们不在IDL模块中。这会导致Java编译错误,因为从默认包导入是非法的。
我正在寻找最简单的方法来纠正这个问题。
我考虑了以下几点:
如果没有一个包含所有类型的现有模块,那么我很难相信,如果没有一个包含所有类型的现有模块,那么要强制IDL进入Java包是不容易的。我希望我只是错过了显而易见的事情!
编辑
示例:
Foo.idl
struct Foo
{
.
.
.
}Foo.java:(注意到没有指定包,这意味着默认包):
public final class Foo implements org.omg.CORBA.portable.IDLEntity
{
.
.
.
}ClassUsesFoo.java:
package com.sigh;
import Foo; // <-- this is an error
public class ClassUsesFoo
{
private Foo f;
};发布于 2012-09-14 20:03:25
您可以使用选项pkgPrefix和pkgTranslate,如法国的遗址中所示,我想您的部分是正确的,但我只是为了以防万一而详细说明。
示例:
interface T1
{
};
interface T2
{
};在文件pkgPrefix中退出idl.config配置
PkgPrefix.T1=aaa
PkgPrefix.T2=bbb以下命令
idlj -td dir T.idl在(现有)目录dir中创建文件:
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的组合。
https://stackoverflow.com/questions/11197518
复制相似问题