如何从我的Java代码获得Maven项目basedir() ?
根据maven文档,有一个maven属性${project.basedir}
如果您在资源中包含一个属性文件,其中包含${project.basedir}
占位符,并启用资源插件的过滤,您将发现在构建时将basedir替换到属性文件中。然后你可以在代码中使用Properties
实例加载它。
在/src/main/resources中创建一个名为project的文件。属性,包含
my.basedir=${project.basedir}
然后,在POM中启用对/src/main/resources的过滤,如上面链接的maven资源过滤文档所述。
然后,在代码中,在运行时,将属性文件加载到Properties
实例
Properties props = new Properties();
props.load(this.getClass().getResourceAsStream("project.properties"));
String myBasedir = props.get("my.basedir");
另一种方法是处理一些源文件,并通过挂钩到process-sources
阶段在那里进行替换,但这可能不太容易解释。
我假设你想要这个从'exec:exec'或'test'运行。如果是这种情况,你可以通过
获取它System.getProperties().get("basedir")
你不能,因为maven是用于构建的,并且在构建之后不存在。
如果你需要在构建期间(例如通过exec插件),那么它可以作为一个系统属性访问,或者你可以将它作为参数传递给执行的程序。