如何在项目中生成jar和war

时间:2012-04-17 11:23:37

标签: maven maven-2 maven-plugin maven-3

我们有两个不同的项目。并且控制器在两个项目中几乎相同。

项目A里面有控制器。所以为它制造战争不是问题。

但是项目B需要Controller的项目A控制器。

任何机构都可以告诉我如何从项目A的控制器生成jar文件,我可以在项目B中使用它?

4 个答案:

答案 0 :(得分:13)

这种方法的默认解决方案是有两个单独的模块用于战争,一个用于控制器模块。不要开始与Maven战斗。

答案 1 :(得分:0)

将项目A的包装视为战争。将maven jar插件添加到项目A的pom.xml中。用" mvn clean package jar:jar"构建项目。它会创造一个罐子和战争。

答案 2 :(得分:0)

正如@Shashank所指出的,你可以让maven也执行maven-jar-plugin。但这只会创建一个JAR,它只包含已编译的类,但不包含webapp源。

如果只使用简单的mvn clean install命令在没有显式调用mvn clean install jar:jar的情况下,如何在多模块项目中执行此操作很简单:

只需将maven-jar-plugin添加到>build>plugins,然后在“套餐”阶段调用它:

<project>
  <packaging>war</packaging>
  <!-- .. -->
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <classifier>classes</classifier>
        </configuration>
        <executions>
          <execution>
            <id>package-jar</id>
            <phase>package</phase>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

这将创建一个大的.war和一个较小的-classes.jar工件。

更新2017-06-15 :另一方面,如果需要war文件的精确副本(不仅是打包的java类),这是某种被屏蔽为JAR文件,您可以使用maven-dependency-pluginmaven-install-plugin的组合来创建WAR的JAR副本。 (我碰巧需要这样的解决方案 - 不要问为什么;)

创建一个依赖于war模块的新模块:

<project>
  <!-- ... -->
  <dependencies>
    <!-- ... -->
    <dependency>
      <groupId>your-group-id-here</groupId>
      <artifactId>your-war-artifact-id-here</artifactId>
      <version>${project.version}</version>
      <type>war</type>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <id>copy</id>
            <phase>package</phase>
            <goals>
              <goal>copy</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <artifactItems>
            <artifactItem>
              <groupId>your-group-id-here</groupId>
              <artifactId>your-war-artifact-id-here</artifactId>
              <version>${project.version}</version>
              <type>war</type>
              <overWrite>true</overWrite>
              <destFileName>jar-copy-of-war.jar</destFileName>
            </artifactItem>
          </artifactItems>
          <overWriteReleases>false</overWriteReleases>
          <overWriteSnapshots>true</overWriteSnapshots>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-install-plugin</artifactId>
        <executions>
          <execution>
            <id>install-copy-of-war</id>
            <phase>install</phase>
            <goals>
              <goal>install-file</goal>
            </goals>
            <configuration>
              <packaging>jar</packaging>
              <classifier>copy-of-war</classifier>
              <artifactId>${project.artifactId}</artifactId>
              <groupId>your-group-id-here</groupId>
              <version>${project.version}</version>
              <file>${project.build.directory}/dependency/jar-copy-of-war.jar</file>
              <generatePom>true</generatePom>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

这将创建战争的副本,将其命名为“--copy-of-war.jar”,而“copy-of-war”是此模块的分类器。

答案 3 :(得分:-3)

您可以在同一个项目中同时生成并安装, 1.要生成jar,请使用maven-jar-plugin 2.要安装Jar,请使用maven-install-plugin 3.要部署Jar,请使用maven-deploy-plugin

注意:使用type作为war,默认情况下会生成项目的war文件。

检查以下更详细的配置: http://communitygrids.blogspot.in/2007/11/maven-making-war-and-jar-at-same-time.html