2014-09-11 117 views
1

我正在使用maven-shade-plugin将两个独立的瓶子合并成一个组合的罐子。如何告诉maven-shade-plugin保存签名?

其中一个罐子是签名的,而另一个则不是。

如果我使用插件的默认配置,它将构建一个损坏的jar,因为新清单缺少签名所需的摘要。

我可以通过排除签名文件来“修复”jar,但是这当然会导致完全未签名的jar。

我正在寻找一种方法来创建一个组合的jar与所有签名类仍然签署和有效。 - jar格式允许使用那些罐子,但我找不到一个简单的方法告诉阴影插件这样做。

我应该写自己的变换器来完成清单文件的合适合并,还是在阴影插件中已经有一个合适的选项,但我没有找到它?


实施例:

的pom.xml(定义两个模块 “foo” 和 “棒”)

<?xml version="1.0"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>mygroup</groupId> 
    <artifactId>myparent</artifactId> 
    <packaging>pom</packaging> 
    <version>1.0</version> 
    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
    <modules> 
    <module>foo</module> 
    <module>bar</module> 
    </modules> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>2.4</version> 
     <configuration> 
      <archive> 
      <addMavenDescriptor>false</addMavenDescriptor> 
      </archive> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

富/ pom.xml中:(结合签名栏成无符号的富)

<?xml version="1.0"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0        http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
    <groupId>mygroup</groupId> 
    <artifactId>myparent</artifactId> 
    <version>1.0</version> 
    </parent> 
    <artifactId>foo</artifactId> 
    <dependencies> 
    <dependency> 
     <groupId>mygroup</groupId> 
     <artifactId>bar</artifactId> 
     <version>1.0</version> 
    </dependency> 
    </dependencies> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>2.3</version> 
     <executions> 
      <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <transformers> 
       <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
        <manifestEntries> 
        <Main-Class>Foo</Main-Class> 
        </manifestEntries> 
       </transformer> 
       </transformers> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

酒吧/ pom.xml中:(创建签署巴)

<?xml version="1.0"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0        http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
    <groupId>mygroup</groupId> 
    <artifactId>myparent</artifactId> 
    <version>1.0</version> 
    </parent> 
    <artifactId>bar</artifactId> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jarsigner-plugin</artifactId> 
     <version>1.3.2</version> 
     <configuration> 
      <keystore>${user.home}/keystore-name</keystore> 
      <alias>alias-name</alias> 
      <storepass>123456</storepass> 
     </configuration> 
     <executions> 
      <execution> 
      <id>sign</id> 
      <goals> 
       <goal>sign</goal> 
      </goals> 
      </execution> 
      <execution> 
      <id>verify</id> 
      <goals> 
       <goal>verify</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

如果两个模块都包含单个hello-word类,我期望java -jar foo/target/foo-1.0.jar可以工作,jarsigner -verify foo/target/foo-1.0.jar可以告诉我们签名类的存在。

回答

2

maven树荫插件不能很好地与签名的罐子玩。我会建议你看看Capsule的方式更好做这种工作。

相关问题