【问题标题】:maven embed dependency artifact code in jarmaven在jar中嵌入依赖工件代码
【发布时间】:2012-03-04 09:05:58
【问题描述】:

我有一个多模块 Maven 项目。我有一个主要的“基本代码”模块,它在我的项目中创建一个包含所有已编译源代码的 jar。

我有另一个模块,“可执行”,它从相同的源代码创建一个可执行的 jar。为避免重复,我想从“基本代码”模块中提取类。

我认为我所要做的就是使“基本代码”模块成为“可执行”模块的依赖项来执行此操作。但我只是得到一个空罐子。我究竟做错了什么? (我的“可执行”pom 在下面)

 <project>
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.myproject/groupId>
    <artifactId>myproject</artifactId>
    <version>1</version>
</parent>
<artifactId>executable</artifactId>
<packaging>jar</packaging>

<dependencies>
    <dependency>
    <groupId>com.myproject/groupId>
        <artifactId>code-base</artifactId>
        <version>1</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <finalName>runnable</finalName>
                <archive>
                    <manifest>
                        <mainClass>com.myproject.Main</mainClass>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>
</project>

【问题讨论】:

  • 您的 com.myproject.Main 在基本代码模块还是可执行模块中定位?
  • 它位于基本代码模块内,这就是为什么我认为正确的方法是通过某种方式将其作为依赖项引入

标签: maven


【解决方案1】:

您正在寻找的可能是 uber-jar:具有所有嵌入式 jar 依赖项的单个 jar 文件,新版本的 maven-assembly-plugin 支持将其作为 4 个预定义描述符之一,请查看 here .

尝试使用 maven-assembly-plugin 替换您的 maven-jar-plugin,如下所示:

<!-- Create single executable jar with all dependencies unpacked and embedded -->
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
      <archive>
        <manifest>
          <mainClass>com.myproject.Main</mainClass>
          <addClasspath>true</addClasspath>
          <classpathPrefix>lib/</classpathPrefix>
        </manifest>
      </archive>
      <descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs>
    </configuration>
    <executions>
      <execution>
        <phase>package</phase>
        <goals><goal>single</goal></goals>
      </execution>
    </executions>
  </plugin>

或者,您也可以使用maven-shade-plugin 来执行此操作。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 2017-01-09
    • 1970-01-01
    • 2015-06-12
    • 2017-03-16
    • 1970-01-01
    • 2013-03-31
    相关资源
    最近更新 更多