2013-06-19 1 views
0

Я ищу что-то вроде директивы компилятора на C или C++ или что-то вроде этого для Java. Почему ты спрашиваешь?как структурировать Java-код для повторного использования?

У меня есть код Java-кода, который раньше использовался для одного проекта. Затем второй проект, код был основан на первом проекте. Итак, копия первого со многими изменениями. Такая же структура, хотя в отношении имен и содержимого пакетов и т. Д. Но внутренний класс был другим.

Теперь есть третий проект, похожий на первый и второй, смешанные вместе.

Как структурировать код для создания одного кода base/git repo, который содержит все три кода проекта? И как определить, какой путь кода должен быть запущен? во время выполнения это проект 1 или проект 2 или третий проект? Директивы компилятора используются для C/C++. Ява?

+0

Используйте ', если (флаг)' вместо '# ifdef' –

ответ

2

В Java нет директив-компиляторов (ifdef).

Аннотация Что общего и создать единую библиотеку (или, если необходимо, несколько библиотек), которая предоставляет базовую функциональность, которая используется повторно. Затем реорганизуйте все проекты, которые нужно использовать (то есть расширять или создавать) из библиотеки. Это то, о чем программирует OO.

+0

Я понимаю реферата и тот факт, что нет IFDEF в Java ... Сказать код, какое приложение выполняется, просто используйте аргумент командной строки? Какой-нибудь более элегантный способ? – reza

+1

Нет, я имел в виду «абстрактный» как глагол. Посмотрите, как различные приложения используют код и выясняют, что общего. Затем напишите набор классов, который фиксирует эту общую базовую функциональность и расширяет ее по мере необходимости для каждого проекта. –

+0

Вы не нуждаетесь в '# ifdef' в Java большую часть времени, так как использование' if (flag) 'может быть столь же эффективным в Java. –

0

Я использую ANT Build Script для создания моего проекта java. У меня есть build.properties, который содержит различные значения, которые может иметь переменная. Мой файл build.xml реализует различные конкретные цели сборки, такие как debug, release, test. Используя разные цели сборки для ant (ant debug, ant release), я могу использовать различные версии jar, используя ту же базу кода. Хорошо работает для переменных времени построения, основанных на цели муравьев.

build.properties

# Build Parameters 
# Turn On of Off debugging 
config.debug_true=true 
config.debug_false=false 

Config.java Определить этот класс Java где-то в вашем проекте. Я сделал в папке/config в каталоге проекта.

package com.stackoverflow.ajitk; 

public class Config { 

    // Build for DEBUG or RELEASE 
    public final static boolean DEBUG = @[email protected]; 
} 

build.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project name="ABC" default="release"> 
    <property file="build.properties" /> 

... 

    <macrodef name="copy-release-parameters"> 
     <sequential> 
    <property name="config-target-path" value="gen/com/stackoverflow/ajitk"/> 
    <!-- Copy the configuration file, replacing tokens in the file. --> 
    <copy file="config/Config.java" todir="${config-target-path}" 
    overwrite="true" encoding="utf-8"> 
    <filterset> 
     <filter token="CONFIG.DEBUG" value="${config.debug_false}"/> 
     <--... add more variables as needed by your project ... --> 
    </filterset> 
    </copy> 
     </sequential> 
    </macrodef> 

... 

<-- the above macro should be used in your release/debug target --> 

... 

</project> 
+0

Дайте мне знать, если вы столкнетесь с любыми проблемами, используя этот подход ... – ajitk

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

  • Нет связанных вопросов^_^