【问题标题】:Get an absolute path in a resource generated by a Maven archetype获取 Maven 原型生成的资源中的绝对路径
【发布时间】:2020-10-30 07:26:06
【问题描述】:

我正在尝试获取由原型生成的资源的绝对路径。

https://github.com/DigitalPebble/storm-crawler/blob/master/external/elasticsearch/archetype/src/main/resources/archetype-resources/es-crawler.flux#L25

我试图用

替换上面的行
  • “${project.basedir}”
  • “${project.build.directory}”
  • “${basedir}”
  • “${outputDirectoryFile}”
  • "${outputDirectoryFile}/${artifactId}"
  • "${basedir}/${artifactId}"

但这些都不起作用。我得到的最远的结果是正确的 /${artifactId} 部分。

该文件在 archetype-metadata.xml 中被列为过滤

有没有一个变量可以用来获取生成的目录的绝对路径?

【问题讨论】:

  • 我对flux了解不够,但是如果es-crawler.flux在运行时使用,你不应该尝试使用Maven占位符,因为Maven只是关于构建时间。 . 看起来像是一个好方法,或者特定于操作系统,例如echo $(pwd) (*nix) / echo %cd% (Windows)
  • 感谢@RobertScholte。我们需要一个绝对路径而不是相对路径,而且我们不能在 Flux 中运行脚本。我不想在运行时而是在构建时使用占位符,以便生成的默认值指向绝对路径。原型在构建时会生成许多其他资源,不明白为什么我们不应该对这个做同样的事情。
  • 我仍然认为这种方法是有问题的:一旦绝对路径出现在您的可交付成果中,您就完蛋了。
  • 我无法完全理解这个问题。你试图把那个变量放在哪里?到 es-crawler.flux 的第 25 行?我认为检查 maven 资源插件可能会有所帮助maven.apache.org/plugins/maven-resources-plugin/index.html 首先尝试 ${project.build.resources}。如果您的资源有任何自定义目录配置,请使用插件设置正确的资源目录
  • @RobertScholte '构建时间' 可能不是正确的术语。我的意思是生成时间,即当用户调用 'mvn archetype:generate'

标签: maven maven-archetype


【解决方案1】:

试试这个:

URL res = getClass().getClassLoader().getResource("abc.txt");
File file = Paths.get(res.toURI()).toFile();
String absolutePath = file.getAbsolutePath();

信用:https://stackoverflow.com/a/17351116/14212394

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-26
    • 2016-09-26
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    相关资源
    最近更新 更多