2010-02-10 337 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},并且仍然只需要在一个地方更改它。