2013-02-22 5 views
0

내 Windows 설치 관리자를 위해 내 pom.xml에서 버전 필드의 값을 사용하고 싶습니다. 이렇게하려면 nsis-maven-plugin을 사용하여 PROJECT_VERSION 필드를 포함하는 target/project.nsh을 생성 한 다음 !include을 내 setup.nsi으로 가져옵니다.nsis-maven-plugin으로 VIProductVersion 채우기

다음과 같은 문제가 있습니다. 내 pom project.version이 1.2-SNAPSHOT이라고 가정합니다. makensis는 오류와 함께 실패합니다

[MAKENSIS] Error: invalid VIProductVersion format, should be X.X.X.X 

그래서있어 두 가지 문제 :

  1. 은 "-snapshot"문자열

    나는 VIProductVersion 필드를 설정하기 전에를 잘라 수, 하지만 내 버전은 실제로는 그렇지 않을 때 1.2처럼 보일 것입니다.

  2. 내 버전은 XX처럼 보이지만 XXXX

    할 필요가 이 제로 (예 : VIProductVersion ${PROJECT_VERSION}.0.0)와 필드 그냥 최대한 빨리 1.2.1

내 치어 project.version 변경으로 중단됩니다

하드 패딩

좋은 전략이 있습니까?

+0

그들은 심지어 재미있는 VIProductVersion https://github.com/ps3mediaserver/ps3mediaserver/blob/384e0bb28d903dd3aa866a3828b229ccaebd41a2/src/main/external-resources/nsis/setup.nsi –

답변

1

나는 Maven에 대해 아무것도 몰라.하지만 왜 NSIS가 이런 식으로 작동하는지 말할 수있다.

VIAddVersionKey을 사용하여 원하는 문자열 ("ProductVersion"포함)을 추가 할 수 있습니다. VIProductVersion은 win32/PE 버전 리소스의 일부인 fixed (VS_FIXEDFILEINFO)을 설정합니다. 그 이유는 4 개의 16 비트 숫자를 포함해야합니다 ...

+0

을 정의 귀찮게하지 않는 것 같습니다 PS3MediaServer 보면, 그러나 VIProductVersion은 VIAddVersionKey를 사용할 때 필수 필드입니다. 나는 VIProductVersion을 0.0.0.0으로 설정하고 VIAddVersionKey ProductVersion "1.2-SNAPSHOT"으로 실제 버전을 설정할 수 있다고 가정합니다 ... –

+0

PE 고정 블록이 필요합니다. 0.0.0을 사용하지 마십시오.0, 일부 응용 프로그램이 버전 등을 확인하려고 할 수 있기 때문에 실수를 사용하십시오. – Anders

+0

정확하게 문제가 있습니다 : 1.2-SNAPSHOT을 나타 내기 위해 X.X.X.X를 사용하는 것은 불가능합니다. 내가 1.2.0.0을 거기에 넣으면 그것은 거짓말이 될 것입니다. SNAPSHOT이라는 단어를 알파로 생각하십시오. 1.2 알파를 어떻게 표현 하시겠습니까? 1.2 알파! = 1.2.0.0. 비 알파 버전이 나올 때의 악몽을 생각해보십시오. –

0

나는 똑같은 문제가있었습니다. 즉, 내가 헤더 파일을 호출 (

<resource> 
    <targetPath>${project.build.directory}</targetPath> 
    <file>${project.build.directory}/installer-header.nsh</file> 
    <destFileName>installer-header-processed.nsh</destFileName> 
    <!-- groovy extension point --> 
    <process>{{ 
      def versionsList = project.version.replaceFirst("-SNAPSHOT", "").tokenize('.') 
      while(!(versionsList.size >= 4)){ 
       versionsList.add('0') 
      } 
      files[0].append("!define VI_PRODUCT_VERSION \"" + versionsList.join('.') + "\"\n") 
     }}</process> 
</resource> 
<resource> 
    <targetPath>${project.build.directory}</targetPath> 
    <file>${project.build.directory}/installer-header-processed.nsh</file> 
    <destFileName>installer-header.nsh</destFileName> 
    <move>true</move> 
</resource> 

확인이 플러그인에 대한 문서와 변수/파일 이름을 적응 : 내 프로젝트에서 copy-maven-problem을 사용하기 때문에 , 나는 또한 그루비 조각으로 project.nsh를 전진 할하는 데 사용 installer-header.nsh)

그 다음에 setup.nsi에서 사용할 수있는 헤더에 변수 이름이 VI_PRODUCT_VERSION (원하는대로 이름 변경)이됩니다.

나는 이것이 q 해킹과 같은 것으로 알고 있지만, 지금은 작동합니다. 앞으로 플러그인 생성 변수가 생기기를 바랍니다.

추 신 : 패키징 단계에서 copy-maven-plugin을 BEFORE BEFORE Nets-Maven-Plugin이라고 부릅니다. nsis 플러그인 전에 복사 플러그인을 정의했습니다. .nsh은 준비 패키지 단계에서 생성되므로 처리 전에 존재합니다.

+0

이 스 니펫은 project.version에 다섯 번째 버전 요소가 있는지 여부를 확인하지 않습니다. – SList