仅包含Maven生成的非runnable jar中的某些包

时间:2017-10-31 16:41:39

标签: maven

我正在尝试构建一个不可执行的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>

2 个答案:

答案 0 :(得分:2)

我自己尝试过,这是可能的。

  • 创建新的maven个人资料
  • 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