2012-02-03 15 views
5

Antタスクを使用してJavaクラス名をファイルパスに変換するにはどうすればよいですか?Ant:クラス名をファイルパスに変換する

たとえば、foo.bar.Duckを含むプロパティを指定すると、foo/bar/Duck.classを取得したいと考えています。

<pathconvert><regexpmapper>の点でこれを実装しようとしましたが失敗しました。

答えて

0

Ant resourcesunpackagemapperを使用する別の方法ですが、この目的のために設計されています。反対のpackage mapperも利用可能です。

<property name="class.name" value="foo.bar.Duck"/> 

<resources id="file.name"> 
    <mappedresources> 
    <string value="${class.name}" /> 
    <unpackagemapper from="*" to="*.class" /> 
    </mappedresources> 
</resources> 

あなたは例えば、プロパティヘルパー構文${toString:...}によってリソース値を使用します。

<echo message="File: ${toString:file.name}" /> 

利回り

[echo] File: foo/bar/Duck.class 
+0

このソリューションが動作する**のみとする場合にのみ**リソースが他の場所で見つけることができます。それ以外の場合は、[@matt](http://stackoverflow.com/a/9135198/1099452)のソリューションを使用してください。 – lucasvc

3

はここでこれを行うための可能な方法です:

<property name="class.name" value="foo.bar.Duck"/> 

<loadresource property="file.name"> 
    <string value="${class.name}" /> 
    <filterchain> 
    <replaceregex pattern="\." replace="/" flags="g" /> 
    <replaceregex pattern="$" replace=".class" /> 
    </filterchain> 
</loadresource> 

これはfile.nameプロパティに希望foo/bar/Duck.classを置きます。

0

私はこのためにAntスクリプト・JavaScriptを使用して感じることは、はるかに簡単です

 <property name="class.name" value="foo.bar.duck" /> 
     <script language="javascript"> 
      var className = project.getProperty("class.name"); 
      println("before: " + className); 
      var filePath= className.replace("\\", "/"); 
      println("File Path: "+filePath); 
      project.setProperty("filePath", filePath);    
     </script> 
     <echo message="${filePath}" /> 

注:あなたの変数に引数と同じ名前を付けることができます。例:var wsPathがエラーを起こす可能性があります。

礼儀:https://stackoverflow.com/a/16099717/4979331

関連する問題