Tôi đang cố gắng giảm thiểu kích thước của UberJar bằng cách sử dụng minimizeJar
của . Có vẻ như minimizeJar
chỉ bao gồm các lớp được nhập tĩnh trong mã (Tôi nghi ngờ điều này vì tôi thấy LogFactory.class
trong uber jar tại org\apache\commons\logging\
nhưng không có lớp nào trong gói impl
được bao gồm, do đó ném java.lang.ClassNotFoundException: org.apache.commons.logging.impl.LogFactoryImpl
khi tôi chạy uber-jar).định cấu hình Maven Shade minimJar để bao gồm các tệp lớp
Có cách nào tôi có thể yêu cầu plugin Shade của Maven bao gồm các gói được chỉ định vào trong jar cuối cùng cho dù số minimizeJar
có gợi ý gì không?
Đây đoạn pom về những gì tôi đang cố gắng:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>true</minimizeJar>
<filters>
<filter>
<artifact>commons-logging:commons-logging</artifact>
<includes>
<include>org/apache/commons/logging/**</include>
</includes>
</filter>
</filters>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.myproject.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
'org/apache/commons/logging/**' chỉ khớp với các thư mục, bạn có thể muốn khớp tất cả các tệp. Thay vào đó hãy sử dụng 'org/apache/commons/logging/**/*'. – Corubba
Theo gợi ý của bạn, tôi đã thử '... logging/**', '... logging/**/*', '... logging /**/*.*' nhưng không có tác dụng nào. Tôi đoán vấn đề là bao gồm được bao gồm đầu tiên sau đó minimJar bỏ qua tất cả mọi thứ khác và bó jar như nó nghĩ là phù hợp. – kunal