문제

나는 상속 Java 응용 프로그램(servlet)에서 실행되는 Tomcat.역사적 이유로 코드는"다른 모양과 느낌"옵션을 위치를 기반으로 하는 응용 프로그램 배포됩니다(본질적으로 문제의 상표를 붙).

여러 가지가 있는 상수 제어이 브랜딩,프로세스는 서로 다른 기능을 가지고 있지 않아야 될 것을 압축으로 한 일정한(i.e브랜드로,다국어,플러스 아이콘의 위치와에 css 스타일 시트,etc.).

현재 개발 팀으로 변경은 상수(들은 최소화에서 하나의 데이터 클래스는 잘 설명되어),다음 다시 컴파일을 사용하여 응용 프로그램 개미입니다.

가장 좋은 방법이 무엇인 이 프로세스를 자동화하기 위해 가정에서도 Ant1.8 및 Java6.x?

내가 알고있는 어떤 좋은 솔루션을 사용하여 컴파일러에 인수(다음과 같이 하나 할 수 있는 C 또는 C++),그리고 이에 기대어 일부에"최상의 방법"편집 중 하나에 소스 파일을 포함하는 상수,또는 그들이 또 다른 파일 교환을 사용하여 개미 프로세스를 구축 합니다.내가 좋아하는 결과가 일하는 것이 같은 것을 사용하는"개미는 브랜드를 구축-x"을 변경하는 브랜드 변경 결과를 구축.

감사합니다,

-Richard

도움이 되었습니까?

해결책

사용 교체 작업에서 개미를 값을 변경합니다.

다른 팁

을 넣어 당신의 값으로 속성을 파일이 말하는"프로그램이 setup.속성을"그리고로드의 상수에서 클래스 경로에서 시작(하는 방법은 아래를 참조하십시오 이에 맞는 빌드 프로세스):

public class Constants
{
    private static final Properties props = new Properties();
    public static final String MY_CONSTANT;

    static
    {
        InputStream input = Constants.class.getResourceAsStream("/myapp.properties");
        if(input != null)
        {
           try
           {
              properties.load(input);
           }
           catch(IOException e)
           {
              // TODO log error
           }
        }

        // Initialize constants (dont' forget defaults)
        MY_CONSTANT = properties.getProperty("constant", "default");
        // .. other constants ...
    }
}

지금 별도의 properties 파일에 대한 각각의 브랜드입니다.권에 그것의 이름을 ANT 을 통해-D 나 건축.특성과 파일을 복사하여 귀하의 건축 디렉터리 바로 전에 당신은 항아리(또는 대전)이다.

물론,위의 코드 작동하지만,많은 수 있는 방법을 깨끗하게 청소하고 총알 증거입니다.

또한""봄 방법을 사용 특성 파일,그리고 콩이 가져오는 값에서 특성과 주사 그는 클래스를 필요로 그들을,예를 들어:

<bean id="propertyPlaceholder"  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:configuration.properties" />
</bean>

그리고,주입할 수 있는 속성으로"개미와 같은"syntax:

<bean id="connectionPool"  class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
    <property name="databaseName" value="mydb" />
    <property name="url" value="${db.url}" />
    ...

는 것이 수반 더 다시 쓰기보다 당신이 좋아하는 것입니다.만약 당신이 변경 될 상수에는 각 컴파일,나는 감이 잡았다(당신이 사용하는 경우 정적 결승전은).

public class Foo {
 public static final int SOME_CONSTANT=1;
..
}

public class Bar {
  ...
   int x=5+Foo.SOME_CONSTANT;
  ...
}

는 경우 그 변경 SOME_CONSTANT 에 Foo2 지를 다시 컴파일 바,바 값을 유지하지 1SOME_CONSTANT,으로 정적인 결승전에서 컴파일되기 때문에(컴파일러가는 그것은 필요가 없을 그림을 다시 그들).

내가 사용하여 선호하는 개미의 expandproperties 필터를 대신 대체 작업입니다.으로 교체 작업,빌드 파일의 경로 성장할 수 있도록 대부분 토큰.expandproperties 포함할 수 있 ant 속성에서 직접 텍스트입니다.

<copy file="from" tofile="to">
  <filterchain>
    <expandproperties />
  </filterchain>
</copy>

나는 작동할 수 있는 솔루션을 필요한 만큼 이에 대한 특정한 상황이다.내가 사용했던 개미를 교체 작업과 함께"저장"버전의 지속적인 클래스:

<target name="one" description="constant substitution #1">
  <delete file="./tme3/MyConst.java" />
  <copy file="./save/MyConst.java" tofile="./tme3/MyConst.java" />
  <replace file="./tme3/MyConst.java" token="@BRANDING@" value="ONE_BRAND"/>
  <replace file="./tme3/MyConst.java" token="@STYLESHEET@"
           value="../stylesheet/onebrand.css"/>
  <replace file="./tme3/MyConst.java" token="@FAVICON@" value="../images/onebrand.ico"/>
  <replace file="./tme3/MyConst.java" token="@SHOW_LANGUAGES@" value="false"/>
</target>

나만의 복사본을 만들이 블록 변경 대체에 대한 사례가 필요에 있는 3 세트는 지금,하지만 더 예상된다.

덕분에 한하고 모든 위대한 대답.

사용 Ant 특성 파일, 및 구축"-Dbrand=X".

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top