2017-02-05 53 views
0

有沒有辦法在Maven中使用META-INF/services創建自定義服務文件?這是你怎麼用Ant來做的:https://ant.apache.org/manual/Tasks/jar.html使用Maven創建META-INF/services文件

我明白,可以簡單地在我的源代碼中創建一個資源/ META-INF /並將所需的任何服務文件放在那裏。然後Maven會自動將這些文件拖入我的JAR中。這並不能解決我的問題。

我的服務文件的內容根據我構建的JAR的類型而變化,所以我不能簡單地在我的源代碼文件夾中創建它。

在我的源代碼中有多個版本的服務文件,讓Maven排除我不需要的那些,也不能解決我的問題。這是因爲服務文件需要是特定的名稱;有多個版本的文件將阻止這一點。

摘要:有沒有辦法用Maven創建服務文件(META-INF/services)的內容?

謝謝!

+0

這是相當不清楚的。在結構/內容方面你能展示你現在擁有的東西嗎?你期望的結果是什麼? – Tunaki

+0

如果您查看指向Ant頁面的鏈接,請在「服務」部分中,您會看到它允許您通過採用兩個參數來創建服務文件:1.「type」 - 服務的名稱文件。 2.「提供者」 - 提供者的類名稱。所以如果我指定了1.「java.my.serviceFile」2.「com.test.mytest」,我最終會得到一個名爲「java.my.serviceFile」的文件,它將包含文本「com.test.mytest」 。我想對Maven也這樣做。 – BlueBucket7

+0

好的,所以你想動態創建服務文件,給定一個內部名稱分類名稱和實現分類名稱。我不認爲有這種內置的方式;你可能不得不通過Maven Antrun插件調用Ant任務。 – Tunaki

回答

0

如果您可以創建合理數量的此類服務文件,則可以將它們存儲在項目中的單獨路徑中。例如:

Example directory structure

然後你可以選擇包括與pom.xml像這樣的(一個例子是pom.xml是強大的,但詳細)文件:

<properties> 
    <service.declaration.dir>src/serviceManifests</service.declaration.dir> 
    <service.files.path>META-INF/services</service.files.path> 
</properties> 

<profiles> 
    <profile> 
     <id>foo</id> 
     <build> 
      <resources> 
       <resource> 
        <directory>${service.declaration.dir}</directory> 
        <includes> 
         <include>${service.files.path}/foo</include> 
        </includes> 
       </resource> 
      </resources> 
     </build> 
    </profile> 
    <profile> 
     <id>bar</id> 
     <build> 
      <resources> 
       <resource> 
        <directory>${service.declaration.dir}</directory> 
        <includes> 
         <include>${service.files.path}/bar</include> 
        </includes> 
       </resource> 
      </resources> 
     </build> 
    </profile> 
</profiles> 

要包含兩個文件你會然後運行:

mvn clean package -P foo -P bar 

要僅包含foo文件,您將運行:

mvn clean package -P foo