maven - 从 maven ${project.basedir} 获取最后一个文件夹的名称

标签 maven maven-2 maven-3

我对 Maven 有同样的问题,有人对 Ant ( How can I get the name of the last folder in my basedir path in Ant? ) 提出过同样的问题。

如何从变量 ${project.basedir} 中获取最后一个目录名称?

例如,如果我的 pom.xml 在:

/home/me/project/pom.xml

然后 ${project.basedir} =/home/me/project/

我只想要目录名称“项目”。

谢谢!

最佳答案

使用:${project.file.parentFile.name}
如何解决:
${project} 实际上解析为 MavenProject 对象。从那里,您可以只使用 bean 属性来获取所需的值。在这种情况下:

  • 使用 file 属性(通过 getFile() )
  • java.io.File 上使用 parentFile 属性(通过 getParentFile() )
  • 使用文件的 name 属性来获取没有路径信息的名称(通过 getName() )


  • (编辑:评论后)

    为 Artifact ID 使用属性不是一个好主意。 ${project.file.parentFile.name} 属性作为 artifactId 的一部分使用时无法解析,但是某些属性确实有效(artifactId 的 project.groupId 似乎有效)。

    但是,不建议这样做。事实上,如果您使用 Artifact ID 的任何属性而不是常量,您将在构建项目时收到警告:
    [WARNING] Some problems were encountered while building the effective model for <your groupID>:<your artifactID>:jar:1.0-SNAPSHOT
    [WARNING] 'artifactId' contains an expression but should be a constant. @ <your groupID>:<your artifact ID>:1.0-SNAPSHOT, <basedir>/pom.xml, line 5, column 14
    [WARNING] 
    [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
    [WARNING] 
    [WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
    

    关于maven - 从 maven ${project.basedir} 获取最后一个文件夹的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9849868/

    相关文章:

    java - 在外部库中设置 CDI

    java - Liquibase 看不到实体的变化

    maven-2 - mvn :deploy and mvn:install commands? 和有什么区别

    java - MAVEN_HOME、MVN_HOME 或 M2_HOME

    java - maven-compiler-plugin如何与不同的jdk一起工作?

    maven - Web应用程序中的Elasticsearch Java API错误:java.lang.NoClassDefFoundError:无法初始化类org.elasticsearch.threadpool.ThreadPool

    java - Maven 2依赖问题

    maven-2 - 如何使用 maven-resources-plugin 避免二进制的 UTF-8 编码?

    java - 如何在多模块 Maven 项目的子模块中禁用某些强制规则?

    spring - 将端口号从 docker-maven-plugin 传递给 spring 属性