目前,我的应用程序生成两个JAR文件,一个是可执行的Spring Boot JAR(带有exec分类器),另一个是普通JAR.

我想这样做,这样我就可以共享其他项目中的一些类,而不会将这些类分离到不同的项目中,也不会有模块.

目前,普通的JAR包含项目中的所有文件,包括属性文件、Liqubase补丁、主类等,我不想共享这些文件.有没有办法让这个常规JAR包含来自某个包的类,同时仍然构建包含所有内容的完整的Runnable JAR?

我try 对maven-jar-plugin使用如下配置:

<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>

虽然它似乎确实适用于常规JAR,但它也影响了可运行JAR,因此像资源这样的东西被排除在外.

推荐答案

spring-boot-maven-plugin执行以下操作:它接受默认的项目构件,并使用专有 struct 用依赖项来丰富它.这意味着,如果您的目标是打包单独的"瘦"JAR,则需要使用特定的分类器定义maven-jar-plugin的额外jar执行,如下所示:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <executions>
        <execution>
            <id>thin</id>
            <goals>
                <goal>jar</goal>
            </goals>
            <configuration>
                <classifier>thin</classifier>
                <includes>
                    <include>org/example/stuff/**</include>
                </includes>
            </configuration>
        </execution>
    </executions>
</plugin>

Java相关问答推荐

Jooq隐式地将bigint转换为数字,并且索引不起作用

为什么我的画布没有显示在PFA应用程序中?

如果给定层次 struct 级别,如何从其预序穿越构造n元树

Annotation @ Memphier无法正常工作,并表示:class需要一个bean,但找到了2个bean:

当切换javaFX场景时,stage的大小正在Minimize

使用包私有构造函数强制子类Java类

我想了解Java中的模块化.编译我的应用程序时,我有一个ResolutionException

在模拟超类中设置非setter属性的值

使用Mockito进行的Junit测试失败

Java17支持哪个MapR版本?

将PNG转换为位图自定义十六进制字符串

如何使用路径过渡方法使 node 绕圆旋转?

在Frege中,我如何将一个字符串安全地转换为一个可能的Int?

将双倍转换为百分比

使IntelliJ在导入时优先 Select 一个类或将另一个标记为错误

Java嵌套流查找任意值

如何在Spring Boot中为不同的部署环境管理多个.properties文件?

HBox内部的左对齐按钮(如果重要的话,在页码内)

Android上的SQLite:Android.database.SQLite.SQLiteReadOnlyDatabaseException:try 写入只读数据库(代码1032 SQLite_readonly_DBMOVED)

单例模式中热切初始化和惰性初始化的区别