【问题标题】:Create JAR file if package type is POM如果包类型是 POM,则创建 JAR 文件
【发布时间】:2016-05-04 06:19:56
【问题描述】:

如果项目打包类型为“POM”,我如何制作 JAR 文件。原因是我在这个项目中添加了几个子模块。我正在使用阴影插件制作一个 JAR 文件,但看起来它没有在 .m2 目录中创建,而是在没有任何类、资源等的目标文件夹中创建

Pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>HealthProject</groupId>
  <artifactId>HealthProject</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
    <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.4.3</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <artifactSet>
                <excludes>
                  <exclude>classworlds:classworlds</exclude>
                  <exclude>junit:junit</exclude>
                  <exclude>jmock:*</exclude>
                  <exclude>*:xml-apis</exclude>
                  <exclude>org.apache.maven:lib:tests</exclude>
                  <exclude>log4j:log4j:jar:</exclude>
                </excludes>
              </artifactSet>
            </configuration>
          </execution>
        </executions>
      </plugin>

    </plugins>
  </build>
    <modules>
        <module>database</module>
         <module>services</module>
    </modules>
</project> 

【问题讨论】:

  • 为什么要在 maven 存储库中使用阴影 jar 文件?
  • 我想将 HealthProject JAR 作为依赖项包含在其他项目中。实际上我有两个独立的项目,所以只是想在父项目中添加 HealthProject 项目作为 JAR。但问题是 HealthProject 是 POM 项目,因为它有一些模块。

标签: java spring-boot maven-2 maven-plugin maven-shade-plugin


【解决方案1】:

我会看到以下解决方案。

或者您将它所依赖的模块添加到other project

<dependency>
    <groupId>HealthProject</groupId>
    <artifactId>database</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>HealthProject</groupId>
    <artifactId>services</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

您在 HealthProject 中创建一个新模块,该模块将创建一个 HealthProject 的 Jar。

<parent>
    <groupId>HealthProject</groupId>
    <artifactId>HealthProject</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>healthproject-all</artifactId>
<packaging>jar</packaging>

<dependencies>
    <dependency>
        <groupId>HealthProject</groupId>
        <artifactId>database</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>HealthProject</groupId>
        <artifactId>services</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>

然后在 other project 中添加它作为依赖项。

<dependencies>
    <dependency>
        <groupId>HealthProject</groupId>
        <artifactId>healthproject-all</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>pom</type>
    </dependency>
</dependencies>

【讨论】:

  • 看起来第二种方法可以解决我的问题。只是想知道,在制作这些模块(全健康)时我是否需要制作任何 UBAR jar?我按照您的建议创建了一个罐子,但这些罐子看起来是空的。
  • @user1030128 根据您的其他设置,将maven-shade-plugin 相关部分移动到healthproject-all 是有意义的。否则,您将需要或多或少地复制相同的配置。
  • 你有什么想法/代码 sn-p 我如何在 healthproject-all 中应用阴影插件?我之前试过,但不是一个好罐子
  • @user1030128 来自HealthProject 的当前pom.xml 中的配置应该可以工作。
猜你喜欢
  • 1970-01-01
  • 2014-01-17
  • 1970-01-01
  • 2012-02-28
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
相关资源
最近更新 更多