我有一个由3个不同的库组成的项目。当我运行安装脚本时,它从repo获取所有库并在它们上运行mvn clean install。但是这个版本的库已经安装在repo中。如果我的本地仓库中的pom.xml中的版本等于版本,有没有办法跳过安装阶段。
我知道我可以使用本地repo并只设置依赖项。但我的老板希望我们的项目只能通过公共回购建立,而不需要我们的回购。
答案 0 :(得分:33)
你可以像这样绕过
-Dmaven.install.skip=true
<profiles>
<profile>
<id>skipInstall</id>
<activation>
<property>
<name>maven.install.skip</name>
<value>true</value>
</property>
</activation>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<executions>
<execution>
<id>default-install</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
上周,奥利维尔·拉米(Olivier Lamy)打了补丁。
答案 1 :(得分:10)
可以通过指定以下内容来跳过大多数maven插件:
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>X.Y</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
您还可以设置构建配置文件以设置属性并使用它来确定值。例如,运行命令:mvn -Pexample将选择“示例”配置文件。然后POM将包含:
...
<properties>
<skip.install>false</skip.install>
...
</properties>
...
<profile>
<id>example</id>
<properties>
<skip.install>false</skip.install>
</properties>
</profile>
...
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>X.Y</version>
<configuration>
<skip>${skip.install}</skip>
</configuration>
</plugin>
...
使用这些POM添加,安装插件的默认行为将是执行其默认目标,但如果选择了示例配置文件,则安装插件将跳过其目标。
答案 2 :(得分:4)
使用从其他答案中学到的东西,这对我来说是最干净的结果。
在我的超级pom中,我添加了一个pluginManagement /插件,用于在设置属性deployOnly
时禁用默认安装和默认测试阶段。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
<execution>
<id>default-install</id>
<configuration>
<skip>${deployOnly}</skip>
</configuration>
</execution>
<execution>
<id>default-test</id>
<configuration>
<skip>${deployOnly}</skip>
</configuration>
</execution>
</executions>
</plugin>
因此,在命令行中,我可以通过添加-DdeployOnly
来禁用安装和测试阶段。
mvn clean install #build and test everything
mvn deploy -DdeployOnly #just deploy it
答案 3 :(得分:1)
我知道我可以使用本地repo并只设置依赖项。但我的老板希望我们的项目只能通过公共回购建立,而不需要我们的回购。
你确定你正确理解了老板的意思吗?我将上述解释为“不要在本地存储库中安装第三方库,只使用公共存储库中可用的库”。这与“不使用您的本地存储库”不同,这基本上是不可能的,这不是maven的工作原理。我试着澄清这一点。
除此之外,我不会得到一个非常令人困惑的问题(你在说什么回购?安装脚本在做什么?为什么要在库上调用干净安装?等等)。
答案 4 :(得分:0)
从将来扩展其他答案。
Maven插件具有非常高的自由度,它们如何运行。如果需要,他们可以忽略/覆盖典型的pom.xml设置。此外,<configuration><skip>true</skip></configuration>
只是一个约定,没有什么要求插件遵循它,除非它们中的大多数是这样开发的。
我对最近问题的实验表明,应该同时使用@Cemo的解决方案和@MiloshBoroyevich解决方案,而且该插件还要求两者都让我们真正安心。更具体而言,我唯一可行的配置是:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
<execution>
<id>default-install</id>
<phase>none</phase>
</execution>
</executions>
<configuration>
<skip>true</skip>
</configuration>
</plugin>