maven子模块如何指定路径

maven子模块如何指定路径,第1张

maven子模块如何指定路径可以参考以下教程,几乎是一模一样·的

查找多模块maven reactor项目的根目录

我想使用maven-dependency-plugin从我的多模块项目的所有子模块复制EAR文件到一个相对于整个项目的根目录的目录。

也就是说,我的布局看起来类似于这个,名称改变了:

to-deploy/ my-project/ ear-module-a/ ear-module-b/ more-modules-1/ ear-module-c/ ear-module-d/ more-modules-2/ ear-module-e/ ear-module-f/ ...

我希望所有的EAR文件都从各自模块的目标目录复制到my-project/../to-deploy所以我最终

to-deploy/ ear-module-a.ear ear-module-b.ear ear-module-c.ear ear-module-d.ear ear-module-e.ear ear-module-f.ear my-project/ ...

我可以在每个耳模块中使用相对path来完成,如下所示:

org.apache.maven.pluginsmaven-dependency-plugincopyinstallcopy${project.groupId}${project.artifactId}${project.version}ear../../to-deploy

但是我不想在元素中指定一个相对path。 我喜欢像${reactor.root.directory}/../to-deploy ,但我找不到像这样的东西。

另外,我宁愿如果有某种方式来inheritance这个Maven的依赖插件configuration,所以我不必为每个EAR模块指定它。

我也尝试从根pominheritance自定义属性:

${basedir}

但是当我试图在耳模块POM中使用${myproject.root}时, ${basedir}将会parsing为耳模块的basedir。

此外,我发现

那么有没有简单的方法来find一个多模块项目的根?

使用${session.executionRootDirectory}

为了logging, ${session.executionRootDirectory}适用于Maven 3.0.3中的pom文件。 该属性将是您正在运行的目录,所以运行父项目,每个模块都可以获取该根目录的path。

我把在父pom中使用这个属性的插件configuration,以便它被inheritance。 我在configuration文件中使用它,当我知道我要在父项目上运行Maven时,我只会select它。 这样,当我在一个子项目上运行Maven(因为这个variables不会是父项的path)时,我不太可能以一种不希望的方式使用这个variables。

例如,

org.apache.maven.pluginsmaven-dependency-plugincopy-artifactpackagecopy${project.groupId}${project.artifactId}${project.version}${project.packaging}${session.executionRootDirectory}/target/

我在我的项目中使用的东西是重写子模块poms中的属性。

root: ${basedir} moduleA: ${basedir}/.. other/moduleX: ${basedir}/../..

这样你仍然有相对的path,但是你可以在根模块中定义一个插件,你的模块将inheritance它,并为myproject.root取代它。

有一个maven插件可以解决这个问题: directory-maven-plugin

它会将项目的根path分配给您select的属性。 在文档中查看highest-basedir目标。

例如:

org.commonjava.maven.pluginsdirectory-maven-plugin0.1directorieshighest-basedirinitializemain.basedir

然后在父/子pom.xml中的任何位置使用${main.basedir} 。

正如其他人所说,directory-maven-plugin是要走的路。 不过,我发现它与'目录'的目标最好的工作,如下所述: https : //stackoverflow.com/a/37965143/6498617 。

我更喜欢使用最高basedir对于多模块项目,嵌套多模块poms不工作。 目标目录允许您将属性设置为整个项目中任何模块的path,包括当然的根目录。 它也比$ {session.executionRootDirectory}更好,因为它总是可以工作的,不pipe你是build立根还是子模块,而不pipe当前你的mvn工作目录。

我遇到了类似的问题,因为我需要在项目之间复制文件。 Maven所做的是合乎逻辑的,因为它将保持存储库中安装的pom.xml远离硬编码值。

我的解决scheme是将复制的目录放在Maven工件中,然后使用Ant来提取/复制

我没有意识到find多模块项目的根的“好方法”。 但是你也许可以改进一下你目前的方法。

第一种方法是直接在根项目下创build一个附加模块,将所有EAR声明为依赖关系,并使用dependency:copy-dependencies关系将模块的依赖dependency:copy-dependencies复制到待to-deploy目录(相对)。 是的path仍然是相对的,但由于依赖插件configuration将集中,我不觉得这很烦人。

第二种方法是使用Maven Assembly Plugin代替Maven Dependency Plugin来使用dir格式创build一个分发(这将在目录中创build一个分发)。 这实际上是我会做的。

另一个解决scheme是使用ant任务将“rootdir = $ {basedir}”写入根项目中的目标/ root.properties,然后使用Properties Plugin将该文件重新读入。我还没有尝试过我自己,但我想它应该工作..?

以下小档案为我工作。 我需要这样一个configurationCheckStyle,我把它放到项目根目录下的config目录下,所以我可以从主模块和子模块中运行它。

root-dir${project.basedir}/../../config/checkstyle.xml${project.basedir}/../config

它不适用于嵌套模块,但我相信它可以修改为使用不同的exists几个configuration文件。 (我不知道为什么在validation标签中应该有“../ ..”,而在overriden属性本身中只是“..”,但它只能以这种方式工作。)

所以:在某些父项属性的某个地方项目我有我需要稍后关系的文件,这就是为什么我需要绝对path到处。 所以,我在groovy的帮助下得到它:

import java.io.File String p =project.properties['env-properties-file'] File f = new File(p) if (!f.exists()) { f = new File("../" + p) if (!f.exists()) { f = new File("../../" + p) } } // setting path together with file name in variable xyz_format project.properties['xyz_format'] =f.getAbsolutePath() + File.separator + "abc_format.xml"

从eclipse中增加了maven2的插件之后,maven默认的本地库的路径是${user}/.m2/repository/下,一般windows用户的 *** 作系统都安装在C盘,所以这个目录下的jar包比较危险。我尝试从myeclipse->preferences->java->build path->classpath variables中查找M2_REPO这个变量,发现其路径指向的是“C:\Documents and Settings\lvxda\.m2\repository\”,我想修改其路径为:d:\m2\repository,可是这个变量的编辑按钮是灰色的,不可编辑。从网上也没有找到相应的解决办法。打算自己尝试一下:

1、手动创建本地仓库的地址为:d:/m2/repository

2、从windows的环境变量中增加了:M2_REPO=d:\m2\repository,同时把这个变量增加到path变量中。

3、修改d:\maven\conf\setting.xml文件,在<localRepository>节点下新增一行:

复制内容到剪贴板

代码:

<localRepository>d:/m2/repository</localRepository>

表示本地仓库的地址为:d:/m2/repository。

4、从myeclipse->preferences->maven->installations下add一个已经安装到d盘的maven,如:d:\maven,并勾选此新加项。并点击下面的browse按钮打开maven的全局配置文件,如:d:\maven\conf\setting.xml。

5、从myeclipse->preferences->maven->installations下修改user setting 选项为:D:\m2\repository\settings.xml,并点击update settings。并点击下面的reindex按钮更新索引。

6、点击配置窗口的apply按钮,突出配置窗口。

7、配置修改后,myeclise会自动更新索引,当完成后重启myeclipse,会发现M2_REPO变量的值变成了d:/m2/repository。

自此,maven从远程库下载的jar包都会放到d:/m2/repository下。为了避免每次构建系统都从远程仓库下载jar,需要搭建私服。

通过修改Maven全局配置文件来配置Maven的本地仓库目录:<settings><!---->默认Maven本地仓库是在~/.m2/repository目录下:例如:Windows就在C:\Documents and Settings\%HOMEPATH%\.m2\repository目录下。1、命令行直接加参数的方式maven [cmd] -Dmaven.home.local=D:/MavenRepo/.maven�0�22、在用户HOME目录下创建build.properties文件,内容为,注意/或者用\\,用\不行的。maven.home.local=D:/MavenRepo/.maven�0�23、修改%MAVEN_HOME%\lib\maven.jar里的defaults.properties文件,将


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/11272586.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存