当前位置: 首页 > 知识库问答 >
问题:

用maven、spring boot和无回购的第三方lib创建可执行jar都失败了

苏华荣
2023-03-14

java.lang.noClassDefFounderRorr:

所以我想,lib在jar中用于编译,但不能从主类“访问”。因此,我在pom中添加了maven-assembly-plugin来创建一个Uberjar。16分钟后失败,bountycastle包中没有错误消息。这似乎是一个普遍的问题。我去了maven-shade-plugin。这为我创建了一个uberJar(60MB),但spring无法启动,因为它找不到这些第三方库。我不知道为什么。

所以我想扔掉uberJar-Method,使用classpath-method,但我不知道怎么做。因此,对于我来说,部署一个uberJar还是一个带有类路径libs的jar都无关紧要。它只要跑就行了。但是uberJar会更好。

\root
    - \libs
        - \[companyname] <-- 3rd party libs
    - \src
        - \main
            - \....
    - pom.xml
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
</parent>

<dependencies>
    <!-- Libs from official repos -->
    <dependency>
        ...
    </dependency>

    ...

    <!-- These 80+ secret 3rd party libs with no repo -->
    <dependency>
        <groupId>...</groupId>
        <artifactId>...<artifactId>
        <version>1.0.0.10</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/libs/[companyname]/artifactName-1.0.0.10.jar</systemPath>
    </dependency>
</dependencies>

<build>
    <resources>   
        <resource>
            <directory>libs/[companyname]/**</directory>
            <filtering>true</filtering>
            <includes>
                <include>*.jar</include>
            </includes>
        </resource>    
    </resources>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <mainClass>my main class name / namespace</mainClass>
                <layout>JAR</layout>
            </configuration>
        </plugin>
        <!--
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.1</version>
            <configuration>
                <minimizeJar>false</minimizeJar>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.handlers</resource>
                    </transformer>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.schemas</resource>
                    </transformer>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.factories</resource>
                    </transformer>
                </transformers>

            </configuration>
        </plugin>
        -->
    </plugins>
</build>

谢谢大家!

共有1个答案

岳俊雅
2023-03-14

您是否考虑过设置内部maven存储库?最简单的方法是Apache Archival(https://archiva.Apache.org/index.cgi):

对于Apache Archival,您实际上可以手动将第三方库复制到maven存储库中。

在pom.xml中,必须添加以下内容:

<repositories>
    <repository>
        <id>internal</id>
        <name>Archiva Managed Internal Repository</name>
        <url>http://IP_ADDRESS:PORT/repository/internal/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>
 类似资料:
  • 问题内容: 我想使用码头来启动我的应用程序,因此我添加了下面提到的依赖项。当我运行主要方法Jetty成功启动时(我正在一个struts2 + spring3 + hibernate maven项目中,我也可以将其部署在tomcat中) 现在,我想从war包装pom创建一个可执行jar。所以我在pom中添加了maven-assembly-plugin。(我尝试使用maven jar插件,但未添加依赖

  • 我正在使用Liquibase(通过其Maven插件)来处理数据库迁移。 然而,并非所有Liquibase功能都可以通过Maven获得。特别是Generate Changelog,只能通过命令行(使用可下载的liquibase.jar)使用如下命令: 如何通过Maven可移植地执行此命令?也就是说,我不想将liquibase.jar文件添加到我的项目结构中。 相反,我想将其列为一个依赖项(我可以手动

  • 我想做的是: 使用gradle和eclipse作为IDE创建可执行Jar。Jar应该包含运行所需的所有库,并且可以在docker容器中使用。 迄今为止的问题: org.springframework.boot不包含在Jar中。 代码: src/main/java/SampleController。JAVA 建筑格拉德尔 使用的命令: 在工作区/项目/构建/库中 java-jar项目。罐子 错误:

  • 问题内容: 我试图使用maven为名为“ logmanager”的小型家庭项目生成可执行jar,如下所示: 如何使用Maven创建具有依赖项的可执行JAR? 我将此处显示的代码段添加到pom.xml中,并运行了mvn assembly:assembly。它在logmanager / target中生成两个jar文件:logmanager-0.1.0.jar和logmanager-0.1.0-jar

  • 问题内容: 我有一个Maven项目,我想从中创建两个可执行的jar文件。一个将与用户交互使用,第二个将作为计划作业运行,读取前者生成的日志文件。最后,除了MANIFEST.MF文件中的Main- Class属性外,我希望两个jar文件都相同。 我正在使用maven-antrun- plugin创建一个可执行jar,在我尝试通过引入Maven配置文件尝试创建第二个jar文件之前,这似乎工作得很好。我

  • 我试图用scala和Maven创建可执行jar。我正在使用maven-scala-plugin和maven-assembly-plugin,但在我看来,汇编插件被忽略了。我得到没有依赖项的jar和包含没有主类行的manifest。