Java 依赖项的Maven项目变量
我有一个加载小程序的html文件。html需要按名称引用jar,因为maven根据artifactid、版本等对其进行命名,所以html需要随着项目的发展而动态更新。看起来资源过滤是一种方法,但我不知道要插值的变量应该是什么样子。我想要一些类似${project.dependencies.myartifactid.version}的东西,但这似乎不是一个选项,我在谷歌搜索时运气不佳。Java 依赖项的Maven项目变量,java,maven-2,filtering,resources,Java,Maven 2,Filtering,Resources,我有一个加载小程序的html文件。html需要按名称引用jar,因为maven根据artifactid、版本等对其进行命名,所以html需要随着项目的发展而动态更新。看起来资源过滤是一种方法,但我不知道要插值的变量应该是什么样子。我想要一些类似${project.dependencies.myartifactid.version}的东西,但这似乎不是一个选项,我在谷歌搜索时运气不佳。 ${project.build.finalName}这是默认定义为${project.artifactId}-$
${project.build.finalName}
这是默认定义为${project.artifactId}-${project.version}
另一个选项是将POM中的set${project.build.finalName}
更改为静态字符串:
<build>
<finalName>foo</finalName>
</build>
福
您需要类似于${project.dependencies[0].artifactId}
的内容,其中0
是war模块中小程序的依赖项索引(请参阅)。事实上,使用资源过滤应该是可行的
更新:Maven Resources插件中似乎存在缺陷,此属性未按中所述进行筛选。您可能必须使用中建议的解决方法 据我所知,您正在努力使版本保持最新,同时希望其余版本保持不变。有两种选择 第一个是从名称中删除版本,这样HTML就不需要更改。您可以在此处搜索
archiva applet
查看一个实际示例:
在本例中,由于您无论如何都不希望小程序出现在WEB-INF/classes
中,因此webapp中会忽略它,然后通过依赖插件将其包括在内:
<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>
我的团队
my.applet
${applet.version}
然后,您可以在HTML中使用
${applet.version}
,仍然只需在一个地方进行更改。是的,但小程序很可能位于war依赖的jar中,这不会给您小程序的jar名称。没有意识到jar是一个依赖项。那是的,这没用,宾果!没有发现任何迹象表明可以通过这种方式索引变量。谢谢你,先生。(现在如果我能通过名称而不是索引来识别它就好了。哦,好吧,这肯定会起作用。)@Erik是的,它会很脆弱(例如,添加依赖项可能会破坏一切,因此需要记录),但遗憾的是,我不认为有更好的方法。事实上,这只有在maven antrun插件版本1.3之前才能起作用。从1.4开始${project.dependencies[0].artifactId}不再插值。
<properties>
<applet.version>1.2.3</applet.version>
</properties>
<dependency>
<groupId>my.group</groupId>
<artifactId>my.applet</artifactId>
<version>${applet.version}</version>
</dependency>