2014-05-16 25 views
0

我有一個包含數十個XML文件的多項目構建,我的問題是您在某些XML文件中指定了完整的類名稱(例如com.myproject.CheckItem),但沒有在任何時候檢查以確認您在構建過程中輸入的內容是否正確。您只能通過轉到使用XML的應用程序區域來查看您輸入的內容是否正確。Gradle:驗證類的列表在構建中的類路徑中

我想要做的是,在gradle build期間的某個時刻,請驗證這些XML文件中定義的類名稱是我的Classes中的一個,還是放在兩個lib文件夾中的一個jar中添加爲編譯依賴關係。

我現在在哪裏是我有一個Map<String, List<String>>所有的鍵都是類名稱,值是包含該鍵的文件列表。

所以,它看起來像這樣:

com.myproject.CheckItem 
    - C:\Development\my-app\app-core\src\main\resources\META-INF\Totally.xml 
    - C:\Development\my-app\app-filter\src\main\resources\META-INF\Awesome.xml 

com.myproject.CheckSquare 
    - C:\Development\my-app\app-core\src\main\resources\META-INF\FarOut.xml 

我一直在擺弄周圍通宵看最好的辦法去了解這一點,最簡單的是做這樣的事情:

try { 
    Class.forName("com.myproject.CheckItem", false, this.getClass().getClassLoader()); 
    // it exists on the classpath 
} catch(ClassNotFoundException e) { 
    // it does not exist on the classpath 
} 

但是,我還沒有把它整合到Gradle構建過程中,這是我喜歡它的地方,最好是在我自己的Gradle插件中分離出來。

作爲一種替代方案,我考慮過做一個參數化的單元測試,因爲在單元測試中它會很容易地訪問類路徑,而且我可以做到上面的,但是希望在Gradle構建過程中做到這一點。

對此提出建議?

回答

0

我有一個類似的問題,我通過JavaExec任務解決了這個問題。總的想法是:在實用程序項目中編寫你的java代碼,從你的主項目依賴關係中的gradle中運行它,並在classpath中獲取編譯好的類,獲利。

在我的情況下,我正在檢查Hibernate註釋的包,然後生成模式到輸出文件。我找到了maven的解決方案:http://blog.iprofs.nl/2013/01/29/hibernate4-schema-generation-ddl-from-annotated-entities/並調整它以適合我的需求。

在我gradle這個版本(用作示例):

task (generateSchema, dependsOn: 'classes', type: JavaExec){ 
    main = 'nl.iprofs.examples.util.SchemaGenerator' 
    classpath = files('./hibernate-schema-generator-1.0.jar',configurations.compile, sourceSets.main.output.classesDir) 
    args 'my.package.entities' 
    args 'src/main/resources/' 
    args 'TSQL' 
} 

build.dependsOn generateSchema 

在你的情況下,你想通過你的XML名稱作爲參數。

0

我最終將我的Gradle項目構建爲多項目Gradle構建,並最終創建了一個build-test項目,該項目具有所有必需子項目和全局依賴關係的編譯依賴關係。

然後,我創建了一個做的類路徑檢查參數化的JUnit測試,這樣我可以:

  1. 選擇跳過測試
  2. 查看什麼是不正確VS檢查構建日誌的詳細HTML報告

這比建議使用enlait更簡單。