我们的项目有大约10个SpingBoot模块,我们使用maven来管理依赖项。10罐大小约2克。最近,我们需要减少jar的大小,以方便我们的客户部署。
我有了一个想法,提取common jar(不经常更改),比如spring-.jar、spring-boot-.jar、jodd*.jar、elasticsearch等,只要>=2个项目使用一个相同的依赖关系,我们称之为“common jar”。
如果你知道一些有用的解决办法,请告诉我。
新增了一个maven模块来封装常见的依赖项,最后得到了一个包含常见jar文件的lib文档。我把它命名为“共同解放”。
更改旧项目的pom文件,如下所示:
xml prettyprint-override"><plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.xx.MyManagerApplication</mainClass>
<useUniqueVersions>false</useUniqueVersions>
<addClasspath>true</addClasspath>
<!--classpathPrefix let Manifest.MF's Class-Path add the 'common-lib' as prefix-->
<classpathPrefix>common-lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.xx.MyManagerApplication</mainClass>
<layout>ZIP</layout>
<excludeArtifactIds>
spring-webmvc,
spring-web,
spring-tx,
spring-security-rsa,
spring-security-crypto,
spring-jdbc,
spring-jcl,
spring-expression,
spring-core,
spring-context,
spring-cloud-starter-zipkin,
...ellipsis
</excludeArtifactIds>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
[2020-12-01 15:54:19.252+0800]-[foundation-manager]-[1;31m[ERROR][0;39m-[]-[8340:main] o.s.boot.SpringApplication 837 : Application run failed
java.lang.NoClassDefFoundError: groovy/lang/GroovyObject
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.springframework.boot.BeanDefinitionLoader.<init>(BeanDefinitionLoader.java:84)
at org.springframework.boot.SpringApplication.createBeanDefinitionLoader(SpringApplication.java:745)
at org.springframework.boot.SpringApplication.load(SpringApplication.java:685)
at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:381)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:305)
at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:137)
at org.springframework.cloud.bootstrap.BootstrapApplicationListener.bootstrapServiceContext(BootstrapApplicationListener.java:208)
at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:104)
at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:70)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127)
at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:74)
at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:54)
at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:338)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:297)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1242)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1230)
at com.yealink.foundation.manager.app.FoundationManagerApplication.main(FoundationManagerApplication.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.PropertiesLauncher.main(PropertiesLauncher.java:593)
Caused by: java.lang.ClassNotFoundException: groovy.lang.GroovyObject
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 40 common frames omitted
如果你知道一些有用的解决办法,请告诉我。
我做了一些类似于您的设置,但在我的情况下,这是为了优化Docker Push。
但是,我的spring-boot-maven-plugin与此不同:
看看下面的内容是否对你有帮助:
<!-- This plugin copies different external dependencies into separate folders
that are later used to build an optimized Docker image -->
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-external-project-dependencies</id>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<includeScope>runtime</includeScope>
<excludeGroupIds>com.susan</excludeGroupIds>
<outputDirectory>${project.build.directory}/external-dependencies</outputDirectory>
</configuration>
</execution>
<execution>
<id>copy-hello-cloud-platform-dependencies</id>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<includeScope>runtime</includeScope>
<includeGroupIds>com.susan.hello.cloud-platform</includeGroupIds>
<outputDirectory>${project.build.directory}/cloud-dependencies</outputDirectory>
</configuration>
</execution>
<execution>
<id>copy-susan-project-dependencies</id>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<includeScope>runtime</includeScope>
<includeGroupIds>com.susan.ca.cc</includeGroupIds>
<outputDirectory>${project.build.directory}/susan-dependencies</outputDirectory>
</configuration>
</execution>
<execution>
<id>submodule-dependencies</id>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<includeScope>runtime</includeScope>
<includeGroupIds>com.susan</includeGroupIds>
<excludeGroupIds>com.susan.ca.cc,com.susan.hello.cloud-platform</excludeGroupIds>
<outputDirectory>${project.build.directory}/submodule-dependencies</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>build-info</id>
<goals>
<goal>build-info</goal>
</goals>
</execution>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<skip>true</skip>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.susan.hello.whee.HelloApplication</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
如何减少Maven可执行Jar文件大小。目前为255 MB。它不允许在Cloudform中部署。 我正在通过云信息进行部署 - 如果我能将文件从255 MB减少,那么我的问题就解决了。 我从JAR文件中看到,下面2个依赖项占用了195 MB。 我应该怎样减少它? 完整的Pom XML文件是- 砰.xml - 4 . 0 . 0 org . spring framework . boot sprin
我想减少一个胖springboot jar文件的占用空间。 这个问题的答案实际上涵盖了开发占用空间更小的spring boot应用程序的所有内容 2-有没有列出我必须排除的自动配置类,我可以去调试看看springboot是自动配置的什么,并拾取我不需要的,但是我正在寻找一些东西,比如一个脚本来检查代码,并给我一个我必须排除的自动配置类的列表。 Gradle用于依赖关系管理。
如何减小Maven可执行Jar文件大小。目前为255 MB。它不允许在Cloud形成中部署。 我正在通过云形成进行部署- 如果我可以将文件的大小从255 MB减少,那么我的问题就会得到解决。 我从JAR文件中看到,下面2个依赖项占用了195 MB。 我应该怎样减少它? 完整的Pom XML文件包括- Pom。xml- 4.0.0组织。springframework。boot spring boot
问题内容: 我正在开发一个 Java Web应用程序 ,其中包括 一个applet 。该小程序依赖于两个jar文件: JFreeChart(用于在客户端绘制图) -1.7 mb(jar文件的大小) MySqlJdbcConnector(用于将在客户端捕获的数据存储到远程数据库)-. 7 mb(JAR文件的大小) 现在,问题是上述两个jar文件的大小。我的小应用程序jar (myApplet.jar
标题可能会让人困惑(虽然准确)。让我用更多的文字来解释: 重复一遍,我希望库需要的所有东西都打包在一个jar文件(ProjectB的jar文件)中,这样当我将它导入到Android应用程序的库中时,我就可以使用它了。 有没有来自Android开发人员的帮助?
问题内容: 有什么办法可以减少jar文件的大小? 我想要一个减少未使用依赖性的工具。 我使用Maven进行依赖管理。 问题答案: 从Maven的角度来看,JAR文件通常不包含依赖项。因此,您必须在谈论: WAR或EAR或类似文件, 通过合并大量JAR文件而产生的所谓的UberJAR文件;例如使用Maven阴影插件,或 依赖比Maven模块更精细。 在前两种情况下,可以通过在依赖关系规范或war或s