Манифест Netbeans
-
11-09-2019 - |
Вопрос
Можно ли добавить записи в файл manifest.mf jar-файлов, сгенерированных netbeans?
например, для создания пакета osgi.
Решение
Обратите внимание, что вы можете создать манифест "на лету" с помощью ant-задачи и динамически задавать свойства.
Во-первых, вы должны обновить свой файл Netbeans "project.properties", находящийся в каталоге "nbproject".Добавьте в файл следующую строку:
manifest.file=manifest.mf
Затем создайте ant-задачу для создания / обновления манифеста, используя файл "build.xml".В этом примере мы установим номер версии и дату файла jar.
<target name="-pre-init">
<property name="project.name" value="My Library" />
<property name="version.num" value="1.4.1" />
<tstamp>
<format property="NOW" pattern="yyyy-MM-dd HH:mm:ss z" />
</tstamp>
<!--
<exec outputproperty="svna.version" executable="svnversion">
<arg value="-c" />
<redirector>
<outputfilterchain>
<tokenfilter>
<replaceregex pattern="^[0-9]*:?" replace="" flags="g"/>
<replaceregex pattern="M" replace="" flags="g"/>
</tokenfilter>
</outputfilterchain>
</redirector>
</exec>
-->
<manifest file="MANIFEST.MF">
<attribute name="Bundle-Name" value="${project.name}" />
<attribute name="Bundle-Version" value="${version.num}" />
<attribute name="Bundle-Date" value="${NOW}" />
<!--<attribute name="Bundle-Revision" value="${svna.version}" />-->
<attribute name="Implementation-Title" value="${project.name}" />
<attribute name="Implementation-Version" value="${version.num}" />
<attribute name="Implementation-URL" value="http://www.example.com" />
</manifest>
</target>
Это создаст файл манифеста в вашем каталоге проекта netbeans и поместит его в ваш jar-файл.Если вы хотите удалить автоматически созданный файл манифеста из каталога проекта netbeans, просто создайте другую ant-задачу (post jar, конечно).:
<target name="-post-jar">
<delete file="MANIFEST.MF"/>
</target>
Другие советы
Интересная информация может быть здесь:
У меня есть проект библиотеки классов Java с пользовательским файлом манифеста - идеально подходит для пакета OSGI.Чтобы это заработало, сначала отредактируйте project.properties и установите:
manifest.file=manifest.mf
manifest.available=true
Создайте свой собственный файл manifest.mf в каталоге проекта.
(На этом этапе, если вы попробуете выполнить очистку / сборку, вы все равно не получите свой пользовательский файл манифеста - NetBeans предоставит свой собственный.Это происходит потому, что build-impl.xml Цель Ant "-do-jar-with-libraries-without-manifest" вызывается сразу после "-do-jar-with-manifest", перезаписывая ваш пользовательский файл JAR манифеста с помощью JAR манифеста NetBeans по умолчанию.)
Добавьте пользовательскую цель в свой файл build.xml следующим образом:
<target name="-do-jar-with-libraries-without-manifest">
<!-- Inserted to prevent target from running so we can have a custom
manifest file with a class library project type. -->
</target>
Протестировано в NetBeans 6.7.1
в том же каталоге, что и build.xml вы можете поместить свой файл manifest.mf
Я использую Netbeans 6.7.1 Оказывается, что build-imp.xml (фактический скрипт сборки, который использует Netbeans)
- не имеет цели, которая выполняется, если 'с манифестом, без основного класса'
- но в нем есть что-то вроде "с манифестом, с основным классом"
Итак..убедитесь, что у вас есть project-properties, run, main-Class, заполненный чем угодно-
я думаю, что это какая -то недокументированная функция:(
это мое явное содержание:
Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build
Bundle-ManifestVersion: 2
Bundle-Name: jinstall
Bundle-SymbolicName: jinstall
Import-Package: ( .... )
Export-Package: ( .... )
Bundle-Activator: ( ..... )
В случае, если вы используете maven (nbm-maven-plugin), посмотрите на это
Почему бы не использовать проект a maven, который хорошо сработал для меня?Например. апач феликс
Видишь этот подключаемый пример Swing который я создал в netbeans.
Вы можете отредактировать nbproject/build-impl.xml
добавление необходимых свойств следующим образом:
....
<target depends="init,-do-jar-create-manifest,-do-jar-copy-manifest" if="do.archive+main.class.available" name="-do-jar-set-mainclass">
<manifest encoding="UTF-8" file="${tmp.manifest.file}" mode="update">
<attribute name="Main-Class" value="${main.class}"/>
<attribute name="Property1" value="foo"/>
<attribute name="Property2" value="bar"/>
</manifest>
</target>
....
Это приведет к MANIFEST.MF
в файле jar, подобном этому:
Manifest-Version: 1.0
...
Property1: foo
Property2: bar
Протестировано на Netbeans 8.1.
Видишь эта статья.
Здесь описано, как
- создавайте собственные цели для муравьев
- добавьте ручные записи в manifest.mf для выходного файла JAR
- запуск пользовательских целей ant из Netbeans