2010-02-10 268 views
3

我有一個加載小程序的html文件。 html需要通過名稱引用jar,並且由於maven根據artifactid,版本等來命名它,所以隨着項目的發展,html需要動態更新。似乎資源過濾是要走的路,但我無法弄清楚要插入的變量應該是什麼樣子。我想要一些類似於$ {project.dependencies.myartifactid.version}的東西,但這似乎並不是一種選擇,而且我的搜索引擎運行起來非常糟糕。Maven項目變量的依賴關係

回答

6

您需要類似${project.dependencies[0].artifactId}其中0是戰爭模塊中applet依賴關係的索引(請參閱PLXUTILS-37)。實際上,使用資源過濾應該起作用。

更新:看來,在Maven資源插件中存在一個錯誤,該屬性不會像this question中提到的那樣被過濾。您可能必須使用this answer中建議的解決方法。

+0

賓果!沒有發現任何跡象表明您可以通過這種方式對變量進行索引。謝謝你,先生。(現在,如果我只能通過名稱而不是索引來識別它,噢,嗯,這肯定會起作用)。 – 2010-02-11 18:20:53

+0

@Erik是的,它會很脆弱(例如,添加依賴項可能會破壞所有需要記錄的事情),但是很遺憾,我認爲沒有更好的。 – 2010-02-11 18:24:45

+0

實際上這隻能工作,直到maven antrun插件版本1.3。從1.4開始,$ {project.dependencies [0] .artifactId}不再被內插。 – JayZee 2014-09-22 13:23:47

-1

http://docs.codehaus.org/display/MAVENUSER/MavenPropertiesGuide

${project.build.finalName}是指當建項目將打包

創建該文件的最終名稱

你有另一種選擇是要更改設置${project.build.finalName}在一個靜態的字符串你POM:

<build> 
    <finalName>foo</finalName> 
</build> 
+0

是的,但小程序很可能在戰爭所依賴的jar中,這不會給你applet的jar名稱。 – 2010-02-10 03:28:57

+0

沒有意識到JAR是一個依賴項。那麼是的,這不會有幫助。 – 2010-02-10 03:54:39

3

據我瞭解,您正試圖保持版本是最新的,而期待其餘的保持不變。有兩種選擇。

第一種是從名稱中刪除版本,以便HTML不需要更改。您可以通過搜索archiva-applet在這裏看到一個實際的例子:http://svn.apache.org/repos/asf/archiva/tags/archiva-1.3/archiva-modules/archiva-web/archiva-webapp/pom.xml

在這個例子中,因爲你不希望在WEB-INF/classes反正小程序,它是從we​​bapp的省略,然後包括通過Dependency插件:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.0</version> 
    <executions> 
    <execution> 
     <id>copy</id> 
     <phase>process-resources</phase> 
     <goals> 
     <goal>copy</goal> 
     </goals> 
     <configuration> 
     <artifactItems> 
      <artifactItem> 
      <groupId>${project.groupId}</groupId> 
      <artifactId>archiva-applet</artifactId> 
      <version>${project.version}</version> 
      <outputDirectory>src/main/webapp</outputDirectory> 
      <destFileName>archiva-applet.jar</destFileName> 
      </artifactItem> 
     </artifactItems> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

如果您使用的是Maven 2.1.0+,則可以使用prepare-package階段,並將其直接複製到輸出而不修改源目錄。

然後,您使用單個名稱引用HTML中的小程序。

另一種解決方案,如果你想繼續篩選和保留的版本,是使用共享屬性:

<properties> 
    <applet.version>1.2.3</applet.version> 
</properties> 

...

<dependency> 
    <groupId>my.group</groupId> 
    <artifactId>my.applet</artifactId> 
    <version>${applet.version}</version> 
</dependency> 

...

你然後可以在HTML中使用${applet.version},並且仍然只需要在一個地方更改它。