Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.installer / pom.xml @ 41360

History | View | Annotate | Download (14.2 KB)

1
<?xml version="1.0" encoding="UTF-8"?>
2
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0          http://maven.apache.org/xsd/maven-4.0.0.xsd">
3

    
4
        <modelVersion>4.0.0</modelVersion>
5
        <groupId>org.gvsig</groupId>
6
        <artifactId>org.gvsig.desktop.installer</artifactId>
7
        <version>1.0.0</version>
8
        <packaging>pom</packaging>
9
        <name>${project.artifactId}</name>
10

    
11
  <build>
12
  
13
     <pluginManagement>
14
        <plugins>
15
        
16
          <plugin>
17
            <groupId>org.codehaus.gmaven</groupId>
18
            <artifactId>gmaven-plugin</artifactId>
19
            <version>1.4</version>
20
          </plugin>
21
          
22
          <plugin>
23
            <groupId>org.codehaus.mojo</groupId>
24
            <artifactId>properties-maven-plugin</artifactId>
25
            <version>1.0-alpha-2</version>
26
          </plugin>
27
                            
28
        </plugins>
29
     </pluginManagement>
30
  
31
      <plugins>
32
          <plugin>
33
              <groupId>org.codehaus.mojo</groupId>
34
              <artifactId>properties-maven-plugin</artifactId>
35
              <executions>
36
                  <execution>
37
                      <phase>install</phase>
38
                      <goals>
39
                          <goal>read-project-properties</goal>
40
                      </goals>
41
                      <configuration>
42
                          <files>
43
                                        <!-- Define gvsig.product.folder.path in this property -->
44
                                        <file>${env.HOME}/.gvsig-devel.properties</file>
45
                                        <file>${project.basedir}/gvsig-devel.properties</file>
46
                          </files>
47
                          <quiet>true</quiet>
48
                      </configuration>
49
                  </execution>
50
              </executions>
51
          </plugin>
52
          
53
          <plugin>
54
              <groupId>org.codehaus.gmaven</groupId>
55
              <artifactId>gmaven-plugin</artifactId>
56
            <dependencies>
57
                <dependency>
58
                  <groupId>com.github.lookfirst</groupId>
59
                  <artifactId>sardine</artifactId>
60
                  <version>5.0.1</version>
61
                </dependency>
62
            </dependencies>
63
            <inherited>false</inherited>
64
              <executions>
65
                <execution>
66
                  <id>release</id>
67
                  <phase>install</phase>
68
                  <goals>
69
                    <goal>execute</goal>
70
                  </goals>
71
                  <configuration>
72
                    <source><![CDATA[
73

    
74
// To deploy package use:
75
//    mvn -Ddeploy-installers -Duser=USER -Dpassword=PASSWORD install
76
//      
77
                  
78
public class WebDAVClient {
79

    
80
    def log;
81

    
82
    private String user;
83
    private String password;
84
    private Object sardine;
85
            
86
    public WebDAVClient(log) {
87
            this.log = log;
88
    }
89
    
90
    public void login(String user, String password) {
91
        log.info("[WEBDAV] login as '"+user+"'.");
92
        def SardineFactory
93
        try {
94
            SardineFactory = "com.github.sardine.SardineFactory" as Class
95
        } catch (Exception ex) {
96
            log.error("[WEBDAV] can't get SardineFactory.",ex);
97
        }
98
        this.user = user;
99
        this.password = password;
100
        this.sardine = SardineFactory.begin(this.user,this.password);
101
    }
102
        
103
    public void login() {
104
        log.info("[WEBDAV] login as guest");
105
        this.sardine = SardineFactory.begin();
106
    }
107
        
108
    public boolean exists(String url) throws Exception {
109
        return sardine.exists(url);
110
    }
111
        
112
    public void makedirs(String url) throws Exception {
113
        log.info("[WEBDAV] makedirs '"+url+"'.");
114
        URL u = new URL(url);
115
        String[] x = u.getPath().split("/");
116
        String path = "";
117
        for( int i=1; i<x.length; i++ ) { 
118
          path = path + "/" + x[i]; 
119
          URL t = new URL(u,path); 
120
          mkdir(t.toString()); 
121
        } 
122
    } 
123
      
124
    public void mkdir(String url) throws Exception {
125
        if( ! exists(url) ) {
126
            log.info("[WEBDAV] mkdir '"+url+"'.");
127
            sardine.createDirectory(url);
128
        }
129
    }
130
        
131
    public void put(String source, String target) throws Exception {
132
        log.info("[WEBDAV] put '" + source + "' to '" + target + "'...");
133
        InputStream fis = new FileInputStream(new File(source));
134
        sardine.put(target, fis);
135
        log.info("[WEBDAV] put ok.");
136
    }
137
        
138
    public List list(String url) throws Exception {
139
        List resources = sardine.list(url);
140
        return resources;
141
    }
142
}
143

    
144
def getVersionWithBuildNumber(pakageinfo) {
145
    return pakageinfo.getProperty("version")+"-"+pakageinfo.getProperty("buildNumber")
146
}
147

    
148
def getVersionWithoutBuildNumber(pakageinfo) {
149
    return pakageinfo.getProperty("version") // .replaceFirst("-[0-9]*\$","")
150
}
151

    
152
def createLauncher(source,target) {
153
    log.info("Creating launcher ("+source+")...")
154
    source = project.basedir.getAbsolutePath() + source
155
    target = project.basedir.getAbsolutePath() + target
156
    s = new File(source).text
157
    s = s.replaceAll("@@gvsig.product.folder.path@@", gvsig_product_folder_path)
158
    s = s.replaceAll("@@org.gvsig.andami.updater.jar@@", org_gvsig_andami_updater_jar)
159
    s = s.replaceAll("@@version@@", getVersionWithBuildNumber(pakageinfo).replace("-","."))
160
    new File(target).write(s)
161
    log.info("Created "+target)
162
    ant.exec( command:"launch4jc "+ target )
163
    log.info("Created launcher ("+target+").")
164
}
165

    
166
def deployInstallers() {
167
        if( project.properties["user"] == null ) {
168
            print("Enter user name: ");
169
            user = System.console().readLine().toString()
170
            if( user != "" ) {
171
                project.properties.setProperty("user",user);
172
            }
173
        }
174
        if( project.properties["password"] == null ) {                                
175
            print("Enter password for user '" + project.properties["user"] + "': ");
176
            password = System.console().readPassword().toString()  
177
            if( password != "" ) {
178
                project.properties.setProperty("password",password);
179
            }
180
        }
181
        WebDAVClient session = new WebDAVClient(log);
182
        if( project.properties["user"] == null || project.properties["password"] == null ) {                                
183
            log.info("[WEBDAV] creating non authenticated session.");
184
            log.info("[WEBDAV] Use -Duser=USER -Dpassword=PASSWORD to create a authenticated session.");
185
            session.login();
186
        } else {
187
            session.login(project.properties["user"], project.properties["password"]);
188
        }
189
        addonsRepo = "https://devel.gvsig.org/download/gvsig-desktop-testing"
190
        targetfolder = addonsRepo + 
191
            "/dists/" + 
192
            getVersionWithoutBuildNumber(pakageinfo) + 
193
            "/builds/" + 
194
            pakageinfo.getProperty("buildNumber")
195
        sourcefolder  = project.basedir.getAbsolutePath()+"/target"
196
                        
197
        session.makedirs(targetfolder);
198
                        
199
        base_fname = "gvSIG-desktop-" + 
200
          getVersionWithBuildNumber(pakageinfo) + 
201
          "-" + 
202
          pakageinfo.getProperty("state")
203
        
204
        fname = base_fname + "-all-x86-online.zip"                        
205
        session.put(sourcefolder + "/" + fname, targetfolder + "/" + fname);
206

    
207
        fname = base_fname + "-lin-x86-online.run" 
208
        session.put(sourcefolder + "/" + fname, targetfolder + "/" + fname);
209

    
210
        fname = base_fname + "-win-x86-online.exe" 
211
        session.put(sourcefolder + "/" + fname, targetfolder + "/" + fname);
212

    
213
        session.makedirs(targetfolder+"/misc");
214
        fname = base_fname + "-all-all-pool.zip" 
215
        session.put(sourcefolder + "/" + fname, targetfolder+"/misc/" + fname);
216
}
217

    
218
def download_jre() {
219
    jre_pkg_name = "gvSIG-desktop-2.0.0-jre_6_windows_i586-1.6.26-0-devel-win-x86-j1_6.gvspkg"
220
    url = "http://downloads.gvsig.org/download/gvsig-desktop/pool/jre_6_windows_i586/" + jre_pkg_name
221
    target = project.basedir.getAbsolutePath() + "/target/" + jre_pkg_name
222
    if(! new File(target).exists() ) {
223
      if( project.properties["jre.path"]!=null ) {
224
        if( project.properties["jre.path"].endsWith(".gvspkg") ) {
225
          source = project.properties["jre.path"]
226
        } else {
227
          source = project.properties["jre.path"] + "/" + jre_pkg_name
228
        }
229
      if (source.startsWith("~" + File.separator)) {
230
          source = System.getenv().get("HOME") + source.substring(1);
231
      }
232
        if( ! new File(source).exists() ) {
233
          log.info("jre specified in jre.path variable not found - "+source)
234
          log.info("Downloading windows jre plugin")
235
          ant.get(src: url, dest: target)
236
      } else {
237
          log.info("Copy windows jre plugin")
238
          ant.copy(file:source, todir:project.basedir.getAbsolutePath() + "/target/")
239
      }      
240
      } else {
241
        log.info("Downloading windows jre plugin")
242
        ant.get(src: url, dest: target)
243
      }                       
244
    } else {
245
      log.info("Skip download of jre, it exist in local filesystem.")
246
    }  
247
}                      
248

    
249
def checkInstallJammerStatus() {
250
    logfile = project.basedir.getAbsolutePath()+"/target/installjammer.log"
251
    s = new File(logfile).text
252
    if( s.contains("build completed with errors") ) {
253
        throw new RuntimeException("Can't builds installers, see installjammer.log")
254
    }
255
}
256

    
257
                                                
258
ant = new AntBuilder()
259
log.info("For create windows launchers launch4j is requiered in the PATH. In linux link launch4j to launch4jc.")
260
log.info("For create installer InstallJammer is required in the PATH.")
261

    
262
installation_folder = project.basedir.getAbsolutePath()+"/target/product/gvsig-desktop"
263
pool_folder = project.basedir.getAbsolutePath()+"/target/pool.d"
264
new File(installation_folder).mkdirs()
265
new File(pool_folder,"pool").mkdirs()
266

    
267
gvsig_product_folder_path = project.properties["gvsig.product.folder.path"]
268

    
269

    
270
log.info("Getting a local copy of product folder...")
271
ant.copy( todir: installation_folder ) {
272
  fileset( dir: gvsig_product_folder_path )
273
}
274
gvsig_product_folder_path = installation_folder 
275

    
276

    
277
log.info("Populate the pool folder...")
278
ant.move( todir: pool_folder + "/pool" ) {
279
fileset( dir: installation_folder + "/install/" )
280
}
281
new File(installation_folder,"install").mkdirs()
282

    
283
log.info("Preparing basic package set (gvspks)...")
284
gvspks_folder = new File(project.basedir,"target/gvspks")
285
gvspks_folder.mkdirs()                    
286
filenames = new FileNameFinder().getFileNames(pool_folder,"**/*.gvspkg")
287
for( filename in filenames ) {
288
  file = new File(filename)
289
  ant.copy(file:filename, todir:gvspks_folder.getAbsolutePath())
290
}            
291
ant.copy(file:"src/main/config/defaultPackages", todir:gvspks_folder.getAbsolutePath())
292

    
293
log.info("Finding andami updater jar...")
294
org_gvsig_andami_updater_jar = new FileNameFinder().getFileNames(
295
  gvsig_product_folder_path+"/lib",
296
  'org.gvsig.andami.updater-*.jar'
297
)[0]
298
if( org_gvsig_andami_updater_jar == null ) {
299
  log.error("Can't find andami updater jar")
300
  assert false
301
}
302
org_gvsig_andami_updater_jar = new File(org_gvsig_andami_updater_jar).getName()
303
log.info("Found andami updater :"+org_gvsig_andami_updater_jar)
304

    
305
File file = new File(gvsig_product_folder_path + "/gvSIG/extensiones/org.gvsig.app.mainplugin/package.info")
306
log.info("Loading package.info - " + file.getAbsolutePath())
307
pakageinfo = new Properties()
308
pakageinfo.load(file.newDataInputStream())
309

    
310
createLauncher("/src/main/launch4j/gvsig-desktop.xml", "/target/product/gvsig-desktop/gvsig-desktop.xml")
311
createLauncher("/src/main/launch4j/gvsig-desktop-devel.xml", "/target/product/gvsig-desktop/gvsig-desktop-devel.xml")
312
createLauncher("/src/main/launch4j/gvsig-package-installer.xml", "/target/product/gvsig-desktop/gvsig-package-installer.xml")
313
createLauncher("/src/main/launch4j/gvsig-desktop-portable.xml", "/target/product/gvsig-desktop/tools/gvsig-desktop-portable.xml")
314

    
315
download_jre()
316

    
317
log.info("Download busybox.exe.")
318
ant.get(src: "http://downloads.gvsig.org/download/gvsig-desktop/runtimes/winutils/busybox.exe", dest: gvsig_product_folder_path+"/tools/busybox.exe")
319

    
320
source = project.basedir.getAbsolutePath() + "/target/" + jre_pkg_name
321
target = gvsig_product_folder_path + "/gvSIG/extensiones/"
322
log.info("Installing plugin windows jre plugin to " + target + "...")
323
ant.unzip(src: source, dest: target)
324
log.info("jre installed.")
325

    
326
log.info("Building zip installer...")
327
source  = project.basedir.getAbsolutePath()+"/target/product"
328
target  = project.basedir.getAbsolutePath() + 
329
  "/target/gvSIG-desktop-" + 
330
  getVersionWithBuildNumber(pakageinfo) + "-" + 
331
  pakageinfo.getProperty("state") + "-all-x86-online.zip"
332
ant.zip(destfile: target, basedir: source)
333

    
334
log.info("Building pool zip...")
335
source  = project.basedir.getAbsolutePath()+"/target/pool.d"
336
target  = project.basedir.getAbsolutePath() + 
337
  "/target/gvSIG-desktop-" + 
338
  getVersionWithBuildNumber(pakageinfo) + "-" + 
339
  pakageinfo.getProperty("state") + "-all-all-pool.zip"
340
ant.zip(destfile: target, basedir: source)
341

    
342
log.info("Building basic package-set (gvspks)...")
343
source  = project.basedir.getAbsolutePath()+"/target/gvspks"
344
target  = project.basedir.getAbsolutePath() + 
345
  "/target/gvSIG-desktop-" + 
346
  getVersionWithBuildNumber(pakageinfo) + "-" + 
347
  pakageinfo.getProperty("state") + "-all-all.gvspks"
348
ant.zip(destfile: target, basedir: source)
349

    
350

    
351
cmd = [ "installjammer" , 
352
  "--output-dir", project.basedir.getAbsolutePath() + "/target",
353
  "-DBaseDir", gvsig_product_folder_path,
354
  "-DVersion",        getVersionWithoutBuildNumber(pakageinfo),
355
  "-DInstallVersion", getVersionWithoutBuildNumber(pakageinfo),
356
  "-DDevelState", pakageinfo.getProperty("state"),
357
  "-DBuildVersion", pakageinfo.getProperty("buildNumber"), 
358
  "--build-for-release",
359
  "--build-dir", project.basedir.getAbsolutePath() + "/target/installjammer", 
360
  "--build-log-file", project.basedir.getAbsolutePath() + "/target/installjammer.log",
361
  "--verbose",
362
  "--build",
363
  project.basedir.getAbsolutePath() + "/src/main/installjammer/gvsig-standard-installer.mpi"
364
]
365
log.info("Launching InstallJammer - " + cmd.join(" ") )
366
ant.exec( command: cmd.join(" ") )
367

    
368
checkInstallJammerStatus()
369
                        
370
if( project.properties["deploy-installers"] != null ) {        
371
    deployInstallers()
372
}
373

    
374
                    ]]></source>
375
                  </configuration>
376
                </execution>
377
              </executions>
378
          </plugin>
379
      </plugins>
380
  </build>
381

    
382
</project>