2015-03-02 58 views
2

我正在開發通過Gradle(在持續集成服務器上)構建的(Groovy)應用程序。該應用程序應該被編譯爲兩個版本:一個開發版本(包括一些我只想爲自己啓用的功能)和一個公共版本(不包括或僅僅禁用這些「開發功能」)。在構建過程中在源代碼中設置「硬編碼」標誌

對此的一種解決方案是直接在應用程序的主類中使用全局標誌,例如static final boolean PUBLIC_RELEASE。然後在我的代碼中,我可以檢查該標誌並啓用或禁用某個功能。

現在在我的Gradle構建腳本中,我可以檢查環境變量(由Continuous Integration服務器設置)。如果設置了該變量,那麼在編譯源代碼之前,我可以將該標誌的當前值設置(即更改)爲truefalse

我相信這種方法可行。但是,在構建過程中自己修改源代碼並不合適。另一方面,我認爲這對許多軟件項目來說都是標準任務。

有沒有處理這個要求的「最佳實踐」?

回答

0

是可以處理的情況下工作了三路 - 中我會做到這一點的方式下令:

  1. 創建一個專用性能文件生成過程中的過濾,加入最終罐子。應用程序行爲由此文件在運行時確定。基本上這是如何處理這種情況,但這種文件可以由用戶直接在jar中修改。

  2. 源代碼過濾,提示ReplaceTokens。這似乎是保護應用程序的最佳方式,因爲行爲是直接將代碼編譯爲,但在過濾時也存在問題。

  3. 在運行時通過傳遞系統屬性-D來配置應用程序的行爲。可能有很多這樣的屬性應該被傳遞,所以它可能對最終用戶有問題,並且應用程序的配置被明確暴露。

+0

那麼,我不希望用戶能夠啓用這些隱藏功能。所以看起來選項1和3不是我的要求的解決方案。 – Matthias 2015-03-03 10:32:21

+0

這就是我的想法。所以看來你可以使用的是源代碼過濾。 – Opal 2015-03-03 10:52:52

+0

@Matthias,如果問題得到解答,請接受答案。 – Opal 2015-03-04 05:48:08