首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从IDL生成java (避免默认包)

从IDL生成java (避免默认包)
EN

Stack Overflow用户
提问于 2012-06-25 21:19:43
回答 1查看 2K关注 0票数 7

我正在使用一个大型的遗留C++代码库,其中包含许多IDL文件,这些文件具有在任何模块之外声明的所有类型和常量。

对于C++,这将导致生成到全局命名空间的代码--丑陋,但可以接受。

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

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

我考虑了以下几点:

  1. 在所有类型的周围放置一个模块声明。我目前正在使用这个解决方案,但基于受影响类型的数量和对大型遗留C++代码库的影响,这是非常痛苦的。
  2. 使用-pkgPrefix或-pkgTranslate选项。到目前为止,我还不知道如何一般性地完成这一任务,因为您必须指定要转换的模块,或者指定要添加前缀的类型。-pkgPrefix可以用于特定类型,但是我们有数百种类型,我不想为每个编译的文件列出一个-pkgPrefix选项.
  3. 使用语用指令?我不知道该用哪一种,但希望大师能指路?

如果没有一个包含所有类型的现有模块,那么我很难相信,如果没有一个包含所有类型的现有模块,那么要强制IDL进入Java包是不容易的。我希望我只是错过了显而易见的事情!

编辑

  • idlj编译器是idlj.
  • 增加了下面的例子。
  • 更新第2项(上面),以澄清对每种类型使用-pkgPrefix是不可行的(除非可以合理地编写脚本?)

示例:

Foo.idl

代码语言:javascript
复制
struct Foo
{
  .
  .
  .
}

Foo.java:(注意到没有指定包,这意味着默认包):

代码语言:javascript
复制
public final class Foo implements org.omg.CORBA.portable.IDLEntity
{
  .
  .
  .
}

ClassUsesFoo.java:

代码语言:javascript
复制
package com.sigh;

import Foo;  // <-- this is an error
public class ClassUsesFoo
{
     private Foo f;
};
EN

回答 1

Stack Overflow用户

发布于 2012-09-14 20:03:25

您可以使用选项pkgPrefix和pkgTranslate,如法国的遗址中所示,我想您的部分是正确的,但我只是为了以防万一而详细说明。

示例:

代码语言:javascript
复制
interface T1
{
};
interface T2
{
};

在文件pkgPrefix中退出idl.config配置

代码语言:javascript
复制
PkgPrefix.T1=aaa
PkgPrefix.T2=bbb

以下命令

代码语言:javascript
复制
idlj -td dir T.idl

在(现有)目录dir中创建文件:

代码语言:javascript
复制
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的组合。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11197518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档