我正在尝试构建一个不可执行的jar文件,该文件只包含我项目中的某些软件包,以用作公共代码的库。我计划将其部署到Nexus并将其包含在其他项目中。
我可以通过右键单击项目,选择Export,选择JAR文件(NOT Runnable Jar File)然后检查我想要包含的包,在eclipse中手动创建它。我试图在Maven中模仿这种行为。我已经能够通过不在清单中包含main来复制maven中的非runnable部分,但仍然必须找出如何仅包含某些包。
这个项目实际上已经构建了2个jar文件(来自程序中的2个不同的主要文件 - 测试GUI和常规应用程序)。我无法找到有关如何操作不可运行的jar并仅选择某些包的信息。
以下是我的pom文件的现有构建部分。 Build-third是不可运行的jar:
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>build-first</id>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<archive>
<manifest>
<mainClass>com.joy.fb20.da.exec.jDaExecutive</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>DaExecutive</finalName>
</configuration>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
<execution>
<id>build-second</id>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<archive>
<manifest>
<mainClass>com.joy.fb20.gui.jExampleAppGui</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>ExampleAppGui</finalName>
</configuration>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<execution>
<id>build-third</id>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<archive>
<manifest>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>ddslib</finalName>
</configuration>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</plugin>
</plugins>
</build>
答案 0 :(得分:2)
我自己尝试过,这是可能的。
pluginManagement
部分添加到maven-jar-plugin
的新配置文件中,如果maven-resources-plugin
还需要pluginManagement
配置源/资源的包含/排除,并在此处覆盖工件的最终名称,以便为该单独的jar具有不同的名称示例
<profiles>
<profile>
<id>subset</id>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<finalName>subset</finalName>
<includes>
<include>org/example/stuff/**</include>
</includes>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
</profiles>
使用此配置文件maven创建subset.jar
,其中包含org/example/stuff/**
详细了解如何排除:How to exclude a set of packages from maven build jar?
当然也可以在没有pluginManagement
的情况下完成所有这些操作,但在我看来,pluginManagement
提供了干净&amp;灵活的方式来配置这种东西,所以我建议。
答案 1 :(得分:0)
您应该可以通过使用自定义程序集描述符并指定文件集和/或文件includes / exclude来实现。见https://maven.apache.org/plugins/maven-assembly-plugin/assembly.html#class_fileSet