2009-07-21 9 views
7

Mam ogólny plik common.xml, który zawiera wiele ogólnych celów, które są ponownie używane w wielu kompilacjach. To, co chcę zrobić, to "przesłonić" niektóre z tych nieistniejących celów i dołączyć dodatkowe kroki przed lub po wykonaniu istniejącego celu.Czy można przesłonić docelowe obiekty z dołączonego pliku kompilatora?

Najpierw używane są aktualne cele z bieżącego pliku? to znaczy. Jeśli utworzę nowy cel w bieżącym pliku budowli o takiej samej nazwie jak cel w dołączonym pliku, czy ten zostanie wywołany, a dołączony zostanie zignorowany? Jeśli tak jest, to mogę po prostu zrobić i wywołać dołączony cel, ale wydaje się, że byłoby to raczej wywołanie rekurencyjne niż dołączone zadanie.

Myśli?

Odpowiedz

2

Nie, właśnie wypróbowałem to dla ciebie, ponieważ mam podobną konfigurację, ponieważ mam wszystkie cele kompilacji, których używamy w pliku commonFile.build, a następnie użyj następującego kodu, aby go wprowadzić ...

<include buildfile="../commonFile.build"/> 

w moim newFile.build (która obejmuje commonFile.build na początku pliku), dodałem nowy cel o nazwie „build”, gdyż istnieje w commonFile, i tu jest komunikat o błędzie pojawi się w odpowiedzi ...

BUILD FAILED

Zduplikowany cel o nazwie "kompilacja"!

Niezły pomysł, prawdopodobnie burka zasad OO, ale niestety nie działa.

Dobra?

3

Miałem to samo pytanie (i znalazłem takie same wyniki), ale znalazłem również obejście tego problemu. Pozwól mi zilustrować na przykładzie.

Masz ProjectFile.build i CommonFile.build. Załóżmy, że chcesz zastąpić cel o nazwie "Wyczyść".

Trzeba by utworzyć nowy plik (nazywają to CommonFile_Clean.build), który zawiera:

<?xml version="1.0"?> 
<project> 
    <target name="Clean"> 
     <echo message="Do clean stuff here" /> 
    </target> 
</project> 

W CommonFile.build, to warunkowo zawierać CommonFile_Clean.build:

<?xml version="1.0"?> 
<project> 
    <echo message="checking Clean definition..." /> 
    <if test="${not target::exists('Clean')}"> 
      <echo message="Clean target not defined." /> 
     <include buildfile="CommonFile_Clean.build" />  
    </if> 
</project> 

W ProjectFile .build, możesz zdefiniować Clean cel (w takim przypadku CommonFile_Clean.build nie będzie użyty) lub użyć domyślnej implementacji zdefiniowanej w CommonFile_Clean.build.

Oczywiście, jeśli masz dużą liczbę celów, będzie to wymagało sporo pracy.

Nadzieję, że pomaga.

Powiązane problemy