2016-06-03 3 views
1

Контекст проблемыИспользование Ant для удаления разделов из файла манифеста (unsigning баночках)

Я пытаюсь написать немного муравьев в unsign баночку. Для того, чтобы сделать это, я пытаюсь сделать следующие 2 изменения в существующий файл JAR подписанного:

  1. Удалить META-INF/SF, META-INF/ .DSA и META-INF/*. RSA файлы из JAR
  2. удалить подписи, связанные секции из баночки-х манифеста

я могу удалить файлы, связанные подписи с использованием почтового индекса и zipfileset задач, однако, я изо всех сил, чтобы изменить файл манифеста, чтобы удалить разделы подписи ,

Проблема решить

Мне нужен автоматизированный способ с использованием Ant для создания или редактирования файла манифеста, который изначально выглядит как:

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.7.1 
Application-Name: My Application 
Class-Path: lib/my-jar-one.jar lib/my-jar-two.jar 
Built-By: Developer Name 

Name: org/mycompany/myapplication/MyApplicationClassOne.class 
SHA1-Digest: dsaf89y342t24grg9grn90gh24g 

Name: org/mycompany/myapplication/MyApplicationClassTwo.class 
SHA1-Digest: sdfgviuonw0423t42h9brbr4 

в этом:

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.7.1 
Application-Name: My Application 
Class-Path: lib/my-jar-one.jar lib/my-jar-two.jar 
Built-By: Developer Name 

Любая помощь на этом была бы весьма признательна. Я искал в Интернете по-разному, но я не могу найти решение для решения этой проблемы

Дополнительный сценарий

Некоторые линии продолжаются на следующей строке, например, в следующем файле манифеста

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.7.1 
Application-Name: My Application 
Class-Path: lib/my-jar-one.jar lib/my-jar-two.jar 
Built-By: Developer Name 

Name: org/mycompany/myapplication/blah/blah/blah/MyApplicationClassOne 
.class 
SHA1-Digest: dsaf89y342t24grg9grn90gh24g 

Name: org/mycompany/myapplication/MyApplicationClassTwo.class 
SHA1-Digest: sdfgviuonw0423t42h9brbr4 

ответ

1

Для достижения этой цели вы можете использовать FilterChain. Например, код ниже будет копировать оригинальный файл манифеста пропуска строки, которые вы хотели удалить:

<copy file="MANIFEST.MF.ORIGIN" tofile="MANIFEST.MF" overwrite="true"> 
    <filterchain> 
     <linecontainsregexp negate="true"> 
      <regexp pattern="^Name:.*$"/> 
     </linecontainsregexp> 
     <linecontainsregexp negate="true"> 
      <regexp pattern="^SHA1-Digest:.*$"/> 
     </linecontainsregexp> 
    </filterchain> 
</copy> 
+0

Это замечательно, хотя некоторые строки больше 72 символов, поэтому атрибуты Name: распространяются на следующую строку, которую не удалось выполнить вышеприведенным решением. Я отредактировал свое оригинальное сообщение, чтобы включить этот сценарий. – user1638152

+0

Возможно, цепочка фильтров, использующая токенизатор строк, и перестает копировать контент, когда найдена первая пустая строка? Извиняюсь, я не слишком разбираюсь в скриптах с муравьями, и поэтому простая задача может занять некоторое время. С помощь очень благодарен – user1638152

1

Решение, которое я получил работать для этой проблемы заключается в следующем:

<copy file="MANIFEST.MF" tofile="MANIFEST.MF.EDITED" overwrite="true"> 
    <filterchain> 
     <replaceregex pattern="\nName:(.+?)\nSH" replace="SH" flags="gis" byline="false"/> 
     <replaceregex pattern="SHA1-Digest:.*" replace="" flags="gis" byline="false"/> 
    </filterchain> 
</copy> 

Это похоже на работу, хотя У меня это работает с помощью проб и ошибок и не полностью понимаю решение на месте. Если кто-то может прояснить это, было бы очень полезно

+0

gis акты для: global, case-insensitive, multi-line – FelixJongleur42

+0

Первый поиск "завертывает" на следующей строке и соответствует только в том случае, если следующая строка начинается с "SH", оставляя "SH" на месте (замените = "SH"). Обратите внимание, что следующей строкой также может быть «SHA-256-Digest», поэтому описанная выше процедура не будет соответствовать этому. – FelixJongleur42

Смежные вопросы