从IDL生成java(避免默认包) 我使用一个大的C++ C++代码库,它有很多IDL文件,所有的类型和常量都声明在任何模块之外。 对于C++,这会导致代码被生成到全局命名空间——丑陋但可以接受。

从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

现在我尝试添加Java客户机来通过CORBA进行连接。但是,对于Java,从IDL生成的类型(使用Sun/Oracle IDL编译器For Java:idlj)位于Java默认包中,因为它们不在IDL模块中。这会导致Java编译错误,因为从默认包导入是非法的

我正在寻找最简单的方法来解决这个问题

我考虑了以下几点:

  • 在所有类型周围放置模块声明。我目前正在处理这个解决方案,但是它是非常痛苦的,基于受影响的类型的数量和对大的遗留C++代码库的影响。
  • 使用-pkgPrefix或-pkgTranslate选项。到目前为止,我还不知道如何一般地实现这一点,因为您必须指定要从中转换的模块或指定要添加前缀的类型-pkgPrefix可以用于特定的类型,但我们有数百种类型,我不想为每个编译文件专门列出-pkgPrefix选项
  • 使用pragma指令?我不知道该用哪一种,但希望一位大师能指点方向
  • 我发现很难相信,如果没有一个包含所有类型的现有模块,就没有简单的方法强制IDL位于Java包中。我希望我只是错过了显而易见的事情

    编辑

    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(不起作用)?