Ste*_*eve 6 java maven-2 maven-3
我们有许多不在任何地方托管的第三方依赖项.对于其中的每一个,我们都有一个jar文件,我们希望能够安装和/或部署到我们的存储库.一些jar文件有自己的依赖项,我们还需要声明这些.
我们为每个声明groupId,artifactId,依赖项等的jar文件制作了pom.xml文件.这些pom.xml文件都有一个共同的父pom,它声明了一些常见的信息(例如<repositories>和<distributionManagement>).
我想能够安装或部署这些依赖与作为简单的东西mvn install和mvn deploy(或者mvn install:install-file和mvn deploy:deploy-file),并拥有所有这些命令的必要的属性(artifactId,repositoryId,等)从pom.xml的文件中读取.
为了使这个工作,至少为了部署,我尝试将以下内容放在我的父pom中:
<build>
<plugins>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.4</version>
<configuration>
<file>${jarfile}</file>
<pomFile>pom.xml</pomFile>
<repositoryId>our-id</repositoryId>
<url>our-url</url>
</configuration>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
然后让每个子poms定义jarfile属性.这允许我运行mvn deploy:deploy-file以部署所有子pom工件.据推测,我可以做类似的事情mvn install:install-file去上班.
但是使用这种方法,我无法释放父pom(我必须这么做,因为孩子poms依赖它),如果我尝试mvn release:perform使用父pom,我会得到如下错误:
Cannot override read-only parameter: pomFile
Run Code Online (Sandbox Code Playgroud)
我觉得我可能会以错误的方式解决这个问题.我真正想做的就是:
mvn install或mvn deploy不必指定所有那些复杂的命令行属性的东西我怎样才能做到最好?
编辑:制造这上面清晰的理想,我想能够运行一样简单的东西mvn install或者mvn deploy和没有指定命令行上的属性.
好的,我找到了一个解决方案,允许我运行mvn install或mvn deploy将 jar 文件安装到本地或远程存储库。受到maven-users 列表的帖子的启发并使用build-helper 插件,在父 pom 中,我有:
<pluginManagement>
<plugins>
<!-- Attach the jar file to the artifact -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>attach-artifacts</id>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>${artifactId}-${version}.jar</file>
<type>jar</type>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
Run Code Online (Sandbox Code Playgroud)
然后在子 poms 中,我有:
<packaging>pom</packaging>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
其中一些最初让我绊倒的部分:
attach-artifact应该在下面,这样如果您或父 pom.xml<pluginManagement>没有被执行,它就不会被执行。mvn installmvn deploybuild-helper-maven-plugin在构建插件下指定,以便<pluginManagement>运行父级的代码。<packaging>pom</packaging>因为如果 jar 与工件同名,则无法将其添加到工件中。我认为这种方法的唯一缺点是工件被部署为 typepom而不是 type jar。但我还没有看到任何真正的后果。
| 归档时间: |
|
| 查看次数: |
13489 次 |
| 最近记录: |