maven部署额外的jar文件

问题描述:

我有一个正在构建和部署在一个特定的方式(而不是一个jar文件)的神器。在部署过程中,建立一个战争文件。maven部署额外的jar文件

如何配置pom以使工件也作为jar文件部署到不同的位置?

+1

什么是“特殊的方式”,你正在构建和部署? “在部署过程中”是什么意思?你目前的POM的样本可能有助于使这个问题更清晰。 – 2009-04-16 04:12:23

您应该在pom文件的依赖关系中添加工件的相应依赖项。

例:

<dependency> 
     <groupId>org.apache.myfaces.core</groupId> 
     <artifactId>myfaces-api</artifactId> 
     <version>1.2.2</version> 
     <scope>compile</scope> 
</dependency> 
+0

使一个神器依赖于它自己?我不明白这将如何影响部署。事实上,maven不喜欢所产生的循环引用。 – 2009-04-16 00:50:14

的“行家办法”是src/main/java拆分为三个独立的模块,并有战争文件取决于这一点。

如果您完全拒绝该方法,则可以使用配置文件更改packaging元素的内容。我不确定这是否可能。

+1

您无法直接在配置文件中更改包装,但可以使包装依赖于属性并在配置文件中更改该属性。 – 2013-11-12 08:16:16

将它们分开是正确的选择。强制maven在同一模块中生成战争和罐子是可能的,但会导致你在路上遇到问题。

+0

哪些问题?如果你需要一个jar文件,并且它是由该模块生成的,那么只要该jar文件总是由该模块生成,你应该没问题...(并且你依赖于该jar)。如果你有一个更具体的Maven问题,你想... – smaudet 2017-03-14 09:59:52

解决此问题的一种方法是让模块构建一个jar,然后使用assembly插件在该战争的WEB-INF/lib中使用jar构建war文件。我强烈建议不要这样做。你最好有一个jar项目和一个建立两个模块的父项目的战争项目。

This blog post及其评论有答案。

这三个插件配置将允许您在战争的同时构建/安装/部署jar版本。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>make-a-jar</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-install-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>install</phase> 
      <goals> 
       <goal>install-file</goal> 
      </goals> 
      <configuration> 
       <packaging>jar</packaging> 
       <artifactId>${project.artifactId}</artifactId> 
       <groupId>${project.groupId}</groupId> 
       <version>${project.version}</version> 
       <file> 
        ${project.build.directory}/${project.artifactId}-${project.version}.jar 
       </file> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-deploy-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>deploy</phase> 
      <goals> 
       <goal>deploy-file</goal> 
      </goals> 
      <configuration> 
       <packaging>jar</packaging> 
       <generatePom>true</generatePom> 
       <url>${project.distributionManagement.repository.url}</url> 
       <artifactId>${project.artifactId}</artifactId> 
       <groupId>${project.groupId}</groupId> 
       <version>${project.version}</version> 
       <file>${project.build.directory}/${project.artifactId}-${project.version}.jar</file> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+0

正如你所描述的那样使用maven-install-plugin解决了我在尝试使用android maven插件安装生成但未部署的jar文件时遇到的同样问题,包装设置为aar。我需要jar文件作为NetBeans IDE视觉问题的解决方案。 – Amin 2015-09-05 08:32:17

+0

应该是不言而喻的,但请记住,如果您的项目使用不同的名称创建了jar(或者您在构建中设置了finalName),则需要根据$ {build.finalName} .jar进行相应调整,而不是上述内容。检查目标目录以查看实际生成的jar。 – smaudet 2017-03-14 09:59:16

的Maven deploy装置部署伪影到Maven资源库,而不是应用服务器。

配置额外的JAR神器是这样的:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>make-a-jar</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

安装这个新的神器到您的项目:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.7</version> 
    <executions> 
     <execution> 
      <id>attach-artifacts</id> 
      <phase>package</phase> 
      <goals> 
       <goal>attach-artifact</goal> 
      </goals> 
      <configuration> 
       <artifacts> 
        <artifact> 
         <file>some file</file> 
         <type>jar</type>       
        </artifact> 
       </artifacts> 
      </configuration> 
     </execution> 
    </executions> 
</plugin>