我有一个多模块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>
答案 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执行此操作。
希望有所帮助。