2017-08-02 54 views
0

我是一個完整的新手創建maven原型,在我決定問這個問題之前,我一直在閱讀很多帖子。我想創建一個模板來建立通過接口(由我創建)定義的結構以下新項目:從我的一個類中使用方法名用usign reflection創建一個maven原型

package com.jh.impl; 
public class VideoPlayerCustom implements VideoPlayerInterface { 
    public void play(){} 
    public void pause(){} 
    public void rewind(){} 
    public void stop(){} 
    public void fastFordward(){} 
} 

package com.jh.interfaces; 
public interface VideoPlayerInterface { 
    void play(); 
    void pause(); 
    void rewind(); 
    void stop(); 
    void fastFordward(); 
} 

我想創建它覆蓋其方法的類,像這樣

爲了做到這一點,我發現,這樣使用反射做類似的東西用Java類的話題,但我不能用我的界面,甚至通過簡單的操作,開始得到的結果:

public class ${library-name}Client 
{ 
    #set($year = $package.getClass().forName("java.util.Date").newInstance().getYear() + 1900) 
    #set($name = $package.getClass().forName("com.jh.interfaces.VideoPlayerInterface").getSimpleName()) 

    public void ${name}${year}(){} 
} 

$ {年份}包含本年度(正常工作),但$ {name}的創建從Maven原型項目時失敗:

generate (default-cli) on project standalone-pom: org.apache.maven.archetype.exception.ArchetypeGenerationFailure: Error merging velocity templates: Invocation of method 'forName' in class java.lang.Class threw exception java.lang.ClassNotFoundException: com.jh.interfaces.VideoPlayerInterface at archetype-resources/src/main/java/__library-name__Client.java[line 10, column 39] 

有沒有人通過一個類似的問題了? 感謝

回答

0

一個簡單的方法:在Java代碼中

用通貨再膨脹相關的東西,拿到申報方法和添加方法陣列/列表的速度範圍內。

String sourceClassName = "com.jh.interfaces.VideoPlayerInterface"; 
try { 
    Class sourceClass = Class.forName(sourceClassName); 
    Method[] methods = (Method[]) ArrayUtils.addAll(methods, sourceClass.getDeclaredMethods()); 
    context.put("methods", methods); 
} catch (ClassNotFoundException e1) { 
    e1.printStackTrace(); 
} 

然後,你可以寫你的模板是這樣的:

package com.jh.impl; 
public class VideoPlayerCustom implements VideoPlayerInterface { 
    #foreach ($method in $methods) 
     public void $method.getName()(){} 
    #end 
} 
+0

您好,感謝您的回覆。我是一個具有原型的完全新手,我應該在哪裏附加Java代碼?直到現在,我可以根據屬性值創建一個文件。 – pablogdt

相關問題