jar类名冲突?如何改包名?如何改类名?如何改class字节码中字符串?

上述的问题统统可以交由maven shade plugin中relocate标签完成。

首先,我们来看如何修改包名。


  ...
  
    
      
        org.apache.maven.plugins
        maven-shade-plugin
        3.2.1
        
          
            package
            
              shade
            
            
              
                
                  org.codehaus.plexus.util
                  org.shaded.plexus.util
                  
                    
                    org.codehaus.plexus.util.xml.Xpp3Dom
                    org.codehaus.plexus.util.xml.pull.*
                  
                
              
            
          
        
      
    
  
  ...

然后,我们再看看如何修改类名。以下代码将KafkaService类名改为KafkaObject。


  ...
  
    
      
        org.apache.maven.plugins
        maven-shade-plugin
        3.2.1
        
          
            package
            
              shade
            
            
              
                
                  org.codehaus.plexus.util.KafkaService
                  org.shaded.plexus.util.KafkaObject
                
              
            
          
        
      
    
  
  ...

最后,我们再来看看如何将class字节码文件中字符串A更改为字符串B(注意大小写敏感)。


  ...
  
    
      
        org.apache.maven.plugins
        maven-shade-plugin
        3.2.1
        
          
            package
            
              shade
            
            
              
                
                  A
                  B
                
              
            
          
        
      
    
  
  ...

上面的配置能够将class字节码文件中的字符串A转为B。但是上述配置可能会存在着误杀的问题。比如说,对于字符串AC将于转为BC。这个显然不是我们所想要的。所以这个时候我们需要对上述的配置进行相应的修改。


  ...
  
    
      
        org.apache.maven.plugins
        maven-shade-plugin
        3.2.1
        
          
            package
            
              shade
            
            
              
                
                  ^A$
                  B
                  true
                
              
            
          
        
      
    
  
  ...

这个^A$中^、$表示以字符串A开头,并以字符串A结尾。就可以完成字符串到字符串B的精准转换了。

你可能感兴趣的:(maven,shade,jar冲突,class文件内容替换)