2009-05-18 19 views
9

Tôi đã quản lý để tạo jar chính, sao chép phụ thuộc vào một thư mục duy nhất, bước duy nhất còn lại là ký tất cả các lọ.Dấu hiệu maven không chỉ được tạo ra, mà còn phụ thuộc

Tôi có thể ký vào lọ được sản xuất của riêng mình như một phần của bình: ký hiệu, nhưng làm thế nào để tôi ký phụ thuộc?

Cảm ơn

Trả lời

7

Dưới đây là một vài lựa chọn:

  1. Sử dụng các lệnh ant Maven để chạy jarsigner từ JDK chống lại tất cả các phụ thuộc.
  2. Sử dụng webstart plugin để có thể ký tất cả các JAR của bạn, ngay cả khi bạn không sử dụng nó với mục đích JNLP-izing ứng dụng của bạn. Tôi đang sử dụng nó để thực sự JNLPize một ứng dụng.
  3. Hãy xem nguồn của plugin webstart đang làm gì để lặp lại tất cả các phụ thuộc và ký chúng và bắt đầu một Plugin/Mojo mới của Maven thực hiện điều tương tự, không có JNLP.
  4. Onejar your app and its dependencies và chỉ cần ký tên đó.
1

add để plug-in cấu hình <archiveDirectory>target</archiveDirectory>

+0

Đó sẽ là một tham số Plugin jarsigner (http://maven.apache.org/plugins/maven-jarsigner-plugin/sign-mojo.html#archiveDirectory), nhưng mục tiêu không phải là một giá trị tốt. Thư mục đích không tương ứng với thư mục gốc của jar mong muốn. – Eero

0

Nếu bạn đang sử dụng maven-jar-plugin, bạn có thể chỉ định đơn jar ký sử dụng "jarPath" thiết lập. Cấu hình sau sẽ khiến cho file jar-với-phụ thuộc sẽ được ký kết thay của file jar phụ thuộc ít:

<plugin> 
    <artifactId>maven-jar-plugin</artifactId> 
    <executions> 
     <execution> 
     <goals> 
      <goal>sign</goal> 
     </goals> 
     </execution> 
     <execution> 
     <id>make-assembly</id> 
     <phase>package</phase> 
     <goals> 
      <goal>sign</goal> 
     </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <!-- NOTE: The secret key is in shared version control. The 
      password is in shared version control. This IS NOT 
      SECURE. It's intended to help avoid accidentally 
      loading the wrong class, nothing more. --> 
     <jarPath>${project.build.directory}/${project.build.FinalName}-${project.packaging}-with-dependencies.${project.packaging}</jarPath> 
     <keystore>${basedir}/keystore</keystore> 
     <alias>SharedSecret</alias> 
     <storepass>FOO</storepass> 
    </configuration> 
    </plugin> 

Nếu bạn muốn đăng nhập cả hai, tôi không biết làm thế nào để làm điều đó với maven-jar-plugin , vì vậy bạn có thể cần phải xem xét các tùy chọn khác được đề cập ở trên.

0

Người ta cũng có thể tạo một JAR đơn bằng cách sử dụng trình cắm thêm maven-assembly.

Cùng với đề xuất khác của Eric Anderson (khi ký một JAR khác), người ta có thể ký JAR lắp ráp này (thay vì JAR nguyên bản). Lưu ý rằng thứ tự của các định nghĩa plugin quan trọng ở đây.

Giả định rằng sign.keystore.file vv được đặt ở nơi khác (ví dụ: trong tiểu sử).

<build> 
    <plugins> 
     <!-- It seems that maven-assembly-plugin must be declared before the maven-jar-plugin, 
      so that it is executed first in the package phase, 
      and then the signing of the packaged jar can succeed. --> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.4</version> 
      <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
       <archive> 
        <manifestEntries> 
         <!-- ... --> 
        </manifestEntries> 
       </archive> 
      </configuration> 
      <executions> 
       <execution> 
        <id>make-assembly</id> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>2.4</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>jar</goal> 
        </goals> 
       </execution> 
       <execution> 
        <id>make-assembly</id> 
        <phase>package</phase> 
        <goals> 
         <goal>sign</goal> 
        </goals> 
        <configuration> 
         <jarPath>${project.build.directory}/${project.build.FinalName}-${project.packaging}-with-dependencies.${project.packaging}</jarPath> 
         <keystore>${sign.keystore.file}</keystore> 
         <type>${sign.keystore.type}</type> 
         <storepass>${sign.keystore.storepass}</storepass> 
         <alias>${sign.keystore.alias}</alias> 
         <verify>true</verify> 
         <verbose>false</verbose> 
         <removeExistingSignatures>true</removeExistingSignatures> 
        </configuration> 
       </execution> 
      </executions> 
      <configuration> 
       <archive> 
        <manifest> 
         <!-- <addClasspath>true</addClasspath> --> 
        </manifest> 
        <manifestEntries> 
         <!-- ... --> 
        </manifestEntries> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
Các vấn đề liên quan