我有一个带有一些配置文件的pom。对于其中一个配置文件,我想添加一个服务器端测试代码模块,用于在一些javascript集成测试中查询数据库。
我不希望这个代码发布,因为它会膨胀,也可能会引入一些安全问题。
我们目前的设置是基本上有2个主要配置文件,指定自己的不同模块列表以及相当长的属性列表。然后我们还有一个缩小配置文件,可以运行某些版本。
这可以通过使用-P标志并提供多个来实现:例如-P firstMainProfile,Minification
新配置文件只需添加一个模块,但取决于其他一些模块和一些属性。我希望我能够做到这一点:
<profile>
<id>Test</id>
<modules>
<module>TestCode</module>
</modules>
</profile>
然后在具有它所依赖的模块的那个之后运行它。例如
-P firstMainProfile,Test,Minification
然而,这不起作用。当它试图构建它时抱怨无法找到依赖项。
我可以复制整个配置文件并添加这个额外的模块,但这会让我头疼并且因为它的接受/集成我希望它的设置方式与另一个完全相同。
请帮忙!我可以使用配置文件来完成这项工作吗?我是否需要对子pom执行某些操作来列出依赖项?它目前看起来像这样:
<parent>
<artifactId>artifact</artifactId>
<groupId>something</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>TestCode</artifactId>
更新
我认为我已经解决了这个问题,但实际上我所做的就是将问题进一步推进。该项目有一个网络模块,据我所知它基本上就是说什么进入战争文件。我的新模块没有进入那里,直到我将其添加为该项目的依赖项。然而,现在新模块已经构建并发布,即使我没有明确地构建它对我没有意义,而且与我想要的相反。
当它构建时它似乎存储在我的m2目录中,即使我没有构建它也会从那里拉出来。
所以现在看来我需要复制web项目来改变部署的内容?有没有办法让依赖条件有条件避免必须这样做?
答案 0 :(得分:1)
需要做很长时间的一系列步骤。
在新模块中添加对其他模块的依赖
我认为当我将导入添加到另一个项目中的类时,我认为IDEA会解决项目的依赖关系。
我需要将它添加到我的新pom中:
<dependencies>
<dependency>
<groupId>group</groupId>
<artifactId>myOtherProject</artifactId>
</dependency>
</dependencies>
将关于依赖关系的元信息添加到父pom
我还需要在依赖关系管理中的父pom中添加一个依赖关系,该关系管理定义了其他的版本。
添加&#39;依赖&#39;部署项目
然后我还需要为特定配置文件激活的webapp / war部署pom添加依赖项(这似乎是在maven中具有条件性的唯一方法吗?)。
避免重复
值得庆幸的是,似乎依赖列表是附加的,所以如果你做这样的事情:
<dependencies>
a
b
c
</dependencies>
<profiles>
<profile>
<id>Test</id>
<dependencies>
d
</dependencies>
</profile>
</profiles>
如果您使用个人资料&#39; test&#39;那么您最终会得到依赖关系a,b,c,d
。因此,您不必复制粘贴整批并定义2个配置文件以添加一个依赖项。
当你在maven中使用其他列表时,我也会出现相同的加法原则。
我正在合并基本的模块集(来自1个配置文件)和我的测试版,它似乎找出了正确的构建顺序。
我的新个人资料看起来像这样。
<profile>
<id>Test</id>
<modules>
<module>TestCode</module>
</modules>
<properties>
<environment>test</environment>
</properties>
</profile>
所以我只是指定差异(只要它们是相加的!)。
花了很长时间才弄清楚,但即使不清楚发生了什么,我也对这个解决方案感到满意。
答案 1 :(得分:0)
我对您的问题没有清楚的了解但我认为您不希望在Test模块中复制<dependencies>
标记,因为它与您的firstMainProfile模块的<dependencies>
非常相似标签?如果这是正确的,你应该import dependencies。
上一节中的示例描述了如何通过继承来指定托管依赖项。但是,在较大的项目中,可能无法实现此目标,因为项目只能从单个父项继承。为了适应这种情况,项目可以从其他项目导入托管依赖项。这是通过将pom工件声明为具有“import”范围的依赖项来实现的。
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>maven</groupId>
<artifactId>B</artifactId>
<packaging>pom</packaging>
<name>B</name>
<version>1.0</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>maven</groupId>
<artifactId>A</artifactId>
<version>1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>test</groupId>
<artifactId>d</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>test</groupId>
<artifactId>a</artifactId>
<version>1.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>test</groupId>
<artifactId>c</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
</project>
假设A是前面例子中定义的pom,最终结果将是相同的。除了d之外,所有A的托管依赖项都将被合并到B中,因为它是在这个pom中定义的。
运行这个想法,让您的Test模块成为firstMainProfile模块的子项可能更直接。这样它就会自动获得这些依赖关系,你不必费心去导入。