Есть ли способ автоматически заменить шаблон в файле .java во время сборки? - PullRequest
2 голосов
/ 23 декабря 2010

Я хочу иметь возможность заменить определенный шаблон в файлах .java во время сборки.На самом деле, я просто хочу заменить определенное значение String для представления времени сборки.(И я также хочу оставить исходный файл без изменений).Есть ли способ сделать это легко (кроме ручного способа)?Я использую NetBeans в качестве своей IDE.

Ответы [ 5 ]

8 голосов
/ 23 декабря 2010

В лучшем случае не помещайте этот шаблон в файл Java, а загружайте его из ресурса, например. Файл .properties.
Maven имеет функции фильтрации ресурсов, вы можете использовать профили для изменения определенных ресурсов или копировать ресурсы из других мест. Муравей дал вам также возможность использовать различные ресурсы локаций.
Вы всегда можете скопировать другой файл свойств вручную. Во всех случаях исходный файл Java не поврежден. Код запускается из вашей IDE, и вы можете изменить шаблон, не перекомпилируя код.

3 голосов
/ 23 декабря 2010

Нам нужно что-то подобное для нашего продукта (встроить время сборки, встроить компьютер и имя пользователя в скомпилированное приложение).

Мы использовали задачу муравья manifest, чтобы вставить манифест в банку, в которой содержится необходимая нам информация. См http://ant.apache.org/manual/Tasks/manifest.html.

Манифест можно легко прочитать из JAR с помощью инструментов. Если вам нужна информация в вашем программном обеспечении, вы можете прочитать ее программно или поместить в файлы .properties (генерируемые при сборке), которые вы можете прочитать из программы.

2 голосов
/ 23 декабря 2010

Я не уверен насчет редактирования кода Java. Но если вы используете Maven, есть способ решить эту проблему. Создайте файл свойств, создайте класс util, который читает файл свойств для вас. Используйте этот класс в других классах, где вы хотите, чтобы свойства были заменены во время сборки.

В основном,

Создайте config.properties с

myprop1=${val1}
myprop2=${val2}

Напишите maven pom.xml, который имеет профили, и сделайте это

<profiles>
  <profile>
      <id>local</id>
      <properties>
        <val1>localval1</val1>
        <val2>localval2</val2>
      </properties>
  </profile>
  <profile>
      <id>prod</id>
      <properties>
        <val1>prodval1</val1>
        <val2>prodval2</val2>
      </properties>
  </profile>
</profiles>

Создайте класс, который читает этот config.properties. И использовать его для чтения динамических данных.

Сборка с использованием mvn -Plocal чистой установки или mvn -Pprod чистой установки в значения заменяется в config.properties на основе профиля.

Надеюсь, это поможет.


С ANT вы можете сделать то же самое. В ANT вы создаете несколько файлов конфигурации, скажем, local.config.properties и prod.config.properties. Во время сборки вы можете передать такой параметр, как «local» или «prod».

Делать копию ресурса, куда вы копируете соответствующий файл, добавляя параметр в config.properties (таким образом, копируя local.config, свойства prod.config, свойства). И после копирования в classpath переименуйте в config.properties

1 голос
/ 23 декабря 2010

Попробуйте использовать задачу Ant "replace", вот пример:

<replace file="${src}/index.html" token="@@@" value="wombat"/>

заменяет вхождения строки "@@@" на строку "wombat" в файле $ {src} / index.html.

1 голос
/ 23 декабря 2010

Я думаю, что Ant или Maven могли бы помочь вам - вы используете какой-либо из них для сборки? Я не использовал Maven, но сделал что-то подобное в Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...