5

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

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

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

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

4

3 回答 3

13

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

于 2012-04-17T11:25:54.743 回答
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 年 6 月 15 日更新:另一方面,如果您需要 war 文件的精确副本(不仅是打包的 java 类),它有点被屏蔽为 JAR 文件,您可以使用maven-dependency-plugin和的组合maven-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”是该模块的分类器。

于 2017-06-14T10:48:58.923 回答
0

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

于 2017-05-03T14:04:30.623 回答