执行Maven项目

11 浏览
0 Comments

执行Maven项目

我有一个代码库,我想将其分发为jar包。它还依赖外部jar包,我希望将其捆绑到最终的jar包中。我听说可以使用maven-assembly-plug-in来实现这一点,但我不明白具体如何操作。有人能给我提供一些示例吗?目前,我正在使用fat jar来捆绑最终的jar包。我希望能够用maven实现相同的功能。

0
0 Comments

当执行Maven项目时,可能会遇到以下问题:

问题:Provider org.apache.xerces.jaxp.SAXParserFactoryImpl not found

解决方法:删除true

问题:java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

解决方法:根据上面的配置部分,添加以下内容:

stackoverflow.com/a/6743609/38368

为了避免冲突,隐藏外部依赖项以及捆绑依赖项并最小化未使用的代码,您可能需要使用maven-shade-plugin插件。以下是一个示例配置:


    
        
            org.apache.maven.plugins
            maven-shade-plugin
            3.1.1
            
                
                    package
                    
                        shade
                    
                    
                        true
                        true
                        
                            ${java.io.tmpdir}/dependency-reduced-pom.xml
                        
                        
                            
                                com.acme.coyote
                                hidden.coyote
                            
                        
                    
                
            
        
    

参考文献:

- http://maven.apache.org/plugins/maven-shade-plugin/plugin-info.html

- http://maven.apache.org/plugins/maven-shade-plugin/shade-mojo.html

根据我的理解,作者想要将jackson-dataformat-xml的依赖项和新生成的jar文件合并到一个大的jar文件中,以简化部署过程。通过使用maven-shade-plugin插件,这个问题可以得到解决。

0
0 Comments

问题出现的原因:maven-assembly-plugin插件在打包过程中无法满足对Uber JAR的需求,因此需要通过maven-shade-plugin插件来解决这个问题。

解决方法:使用maven-shade-plugin插件,配置好后运行mvn package命令即可生成一个包含所有依赖的单一JAR文件。这是目前的正确做法。

然而,有人对这种做法的正确性提出了异议。他认为,如果只需要基本的行为,仍然可以继续使用maven-assembly-plugin插件。maven-shade-plugin插件可以进行高级操作,如重写字节码以修改依赖包的包名。但是,如果在生产代码中使用这种高级操作,会引入额外的风险,而且这种风险是不值得的,除非有充分的理由。

对于maven-shade-plugin插件可能引入的风险,没有给出具体的例子。但是,重写字节码是非常复杂的操作,容易引入更多的错误。这也违背了在Java中开发的一部分目的,因为在开发过程中测试的字节码与实际运行的字节码是不同的。虽然大多数构建中的错误会导致易于检测的编译错误或"文件未找到"错误,但是在这种情况下,构建实际上是修改你编写的代码,任何错误都可能导致难以检测到的奇怪行为。大多数企业级公司不会在没有非常好的理由的情况下冒这种风险。

0
0 Comments

执行Maven项目的原因是为了生成包含所有依赖项的fat jar。为了解决这个问题,需要添加相应的插件到pom.xml文件中。以下是解决方法的详细步骤:

1. 首先,在pom.xml文件中添加maven-assembly-plugin插件。可以在这里找到最新版本的插件信息。具体配置如下:

...

    
        
            org.apache.maven.plugins
            maven-assembly-plugin
            选择最新版本号
            
                
                    jar-with-dependencies
                
            
            
                
                    assemble-all
                    package
                    
                        single
                    
                
            
        
    

...

2. 配置完maven-assembly-plugin后,运行`mvn package`命令将会生成两个jar文件:一个只包含项目类的jar文件,另一个是带有所有依赖项的fat jar文件,后缀为"-jar-with-dependencies"。

3. 如果需要在运行时正确设置classpath,还需要添加maven-jar-plugin插件。具体配置如下:


    org.apache.maven.plugins
    maven-jar-plugin
    
        
            
                true
                fully.qualified.MainClass
            
        
    

对于Spring Boot应用程序,可以使用spring-boot-maven-plugin插件来执行相同的操作。具体配置如下:


    org.springframework.boot
    spring-boot-maven-plugin
    
        true
        ${start-class}
    
    
        
            
                repackage
            
        
    

需要注意的是,此方法已被弃用,现在应使用maven-shade-plugin代替。具体参考链接:stackoverflow.com/a/16222965/274350

以上就是解决"Executing Maven Project"问题的原因和解决方法。

0