maven在jar中嵌入了依赖工件代码

时间:2012-03-03 02:50:36

标签: maven

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

我有另一个模块“executable”,它使用相同的源代码创建一个可执行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>

1 个答案:

答案 0 :(得分:3)

您正在寻找的可能是uber-jar:一个包含所有嵌入式jar依赖项的jar文件,新版本的maven-assembly-plugin支持这个作为4个预定义描述符之一,查看{{3 }}

尝试使用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>

或者,您也可以使用here执行此操作。

希望有所帮助。