0

Rational Software Architect を使用して Java 成果物をモデル化し、生成しています。現時点では、変換を 1 つずつ手動で実行しています。

ここでの要件は、変換を自動化することです。複数の変換を一緒に実行し、エラーがあればログに記録したいということです。

以下のコードから変換を実行しようとしました。しかし、実行すると、次のエラーが表示されます。

現在のワークスペースに存在しない service.tc を読み込もうとしています。

    IPath path = new Path("**D://RSA_NewWorkSpace//UML_MODEL_POC/service.tc**"); 

    IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path); 
    System.out.println("file >> "+file); 

    ITransformConfig config = TransformConfigUtil.loadConfiguration(file); 

    System.out.println("inside testExecute 3 config >> "+config); 

    IStatus status = TransformController.getInstance().execute(config, null, false, null); 

    System.out.println("status >> "+status);

エラー :

file >> L/RSA_NewWorkSpace/UML_MODEL_POC/service.tc 

IOException >>java.io.FileNotFoundException: The transformation configuration file /RSA_NewWorkSpace/UML_MODEL_POC/service.tc does not exist. Verify the correct file path was specified. 

(現在のワークスペースではなく) 他のワークスペースから変換ファイルを参照し、ロードして実行することはできますか?

D://RSA_NewWorkSpace//UML_MODEL_POC/service.tcから変換ファイルを読み込もうとしています。


以下は、ワークスペース外とSOPから変換ファイル(service.tc)をロードしようとしている最新のコードです

for.eg ワークスペースのディレクトリ構造

D:\RSA_NewWorkSpace\UML_MODEL_POC\ . 事業

D:\RSA_NewWorkSpace\UML_MODEL_POC\service.tc

config is nullを取得しています。config の値を取得する方法を教えてください。

public static void getsLink() {

    try {

        String projectName = "UML_MODEL_POC";

        IProject project = getIProject(getWorkspaceFullPath() + IPath.SEPARATOR + projectName,projectName);

        IFile linkFile = project.getFile("service.tc");

        if(linkFile.exists())

            linkFile.refreshLocal(1, null); 

        else {

            createLink(project, linkFile);

        }

        **ITransformConfig config = TransformConfigUtil.loadConfiguration(linkFile);**

        IStatus status = TransformController.getInstance().execute(config, null, false, null);

        System.out.println("status >> "+status);


    }

    catch(Exception e) {

        throw new WrappedException(e);

    }

}

public static IProject getIProject(String projectFullPath, String projectName) {

IProjectDescription の説明。

        try {

            File projectFile = new File(projectFullPath + IPath.SEPARATOR +  ".project");

            if (projectFile.exists()) {

                description = ResourcesPlugin.getWorkspace().loadProjectDescription(new Path(getWorkspaceFullPath() + IPath.SEPARATOR + projectName + IPath.SEPARATOR +  ".project"));

                IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(description.getName());

                return project;

            } 

        } catch (CoreException e) {

            MessageDialog.openError(null, "Project already exists", "Issue when trying to add project \"" + projectName + "\" to workspace.");
            e.printStackTrace();
        }

        return null;

    }

public static String getWorkspaceFullPath() {

        return ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString();

    }

SOP:

プロジェクト = P/UML_MODEL_POC

linkFile = L/UML_MODEL_POC/service.tc

構成 = ヌル

status = Status CANCEL: unknown code=1 null

4

2 に答える 2

0

@ user2057006 別のワークスペースからこのワークスペースに tc ファイルを実行したいのはなぜですか? Tc のローフに成功したとしても、Tc で参照されているモデル プロジェクトが新しいワークスペースで使用できないため、変換の実行は失敗します。複合 tc や ant ビルド、Transformrunner アプリケーションなど、複数の tc を実行する方法は他にもあります。あなたが達成しようとしていることについてもう少し情報を提供していただければ、私はあなたを助けることができます

于 2014-07-30T18:09:58.917 に答える
0

IFile現在のワークスペース内のファイルにのみアクセスできます。

IWorkspaceRoot.getFile(path)パスは常にワークスペース ルートに対する相対パスとして扱われます。

IWorkspaceRoot.getFileForLocation(path)絶対パスを受け入れますが、パスがワークスペースの一部でない場合は null を返します。

を使用IFile.createLinkして、ワークスペース内にワークスペース外のファイルへのリンクを作成できるため、これが役立つ場合があります。

于 2014-07-16T15:14:17.210 に答える