【问题标题】:Getting name of last folder from maven ${project.basedir}从 maven ${project.basedir} 获取最后一个文件夹的名称
【发布时间】:2012-03-24 07:12:08
【问题描述】:

我对 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/

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

谢谢!

【问题讨论】:

    标签: maven maven-2 maven-3


    【解决方案1】:

    使用:${project.file.parentFile.name}

    如何解决:

    ${project} 实际上解析为 MavenProject 对象。从那里,您可以使用 bean 属性来获取您需要的值。在这种情况下:


    (编辑:评论后)

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

    但是,不建议这样做。事实上,如果您对工件 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.
    

    【讨论】:

    • 嗨,由于某种原因,这不能作为 artifactId 工作。我要做的是将我的 artifactId 设置为 pom.xml 文件所在文件夹的名称。这很有趣,因为 ${project.basedir} 被替换为包含 pom.xml 的文件夹的完整路径,但是${project.file} 不会被替换,而是按字面意思视为 artifactId。例如:${project.basedir} 导致:artifactId = /path/to/project/ 而:${project.file} 导致错误,因为设置了 artifactId到:artifactId = ${project.file}
    • @Naijaba 确实在artifactId 上尝试过,但它失败了,但是当我在插件中的配置选项上使用它时可以工作。尽管在 artifactId 中使用这样的模式可能不是一个好主意,但就像其他人将您的项目签出到不同的目录名称一样,artifactId 最终会有所不同。对 artifactId 使用纯字符串通常是个好主意。
    • 超级!感谢那。我一直在尝试找出一种根据我签出的目录命名同一项目的多个不同版本的好方法,这样我就可以将它们全部加载到一个 Eclipse 工作区中。事实证明这非常有效:${project.file.parentFile.parentFile.name}。谢谢!
    • 如果有人在乎的话,我确实通过完全删除 eclipse 插件 projectNameTemplate 标记并在项目级别添加一个简单属性来实现此功能:eclipse.projectNameTemplate>${project.file.parentFile.parentFile。名称}-[artifactId]
    • 对于任何访问这个旧答案的人:似乎 Maven 3 不支持这个,但需要pomFile 而不是file,所以${project.pomFile.parentFile.name},并且还允许更简单的${project.projectDirectory.name} .通过maven.apache.org/ref/3.5.2/maven-model/apidocs/org/apache/maven/…找到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    相关资源
    最近更新 更多