최고의 방법을 변경할 상수 Java 빌드 프로세스
-
03-07-2019 - |
문제
나는 상속 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".