1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package org.codehaus.mojo.appassembler.daemon.booter;
25
26 import java.io.File;
27
28 import org.apache.maven.artifact.Artifact;
29 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
30 import org.apache.maven.project.MavenProject;
31 import org.codehaus.mojo.appassembler.daemon.DaemonGenerationRequest;
32 import org.codehaus.mojo.appassembler.daemon.DaemonGenerator;
33 import org.codehaus.mojo.appassembler.daemon.DaemonGeneratorException;
34 import org.codehaus.mojo.appassembler.daemon.script.AbstactScriptDaemonGenerator;
35 import org.codehaus.mojo.appassembler.model.Classpath;
36 import org.codehaus.mojo.appassembler.model.Daemon;
37 import org.codehaus.mojo.appassembler.model.Dependency;
38 import org.codehaus.mojo.appassembler.model.Directory;
39 import org.codehaus.mojo.appassembler.model.JvmSettings;
40
41
42
43
44
45
46
47
48 public abstract class AbstractBooterDaemonGenerator
49 extends AbstactScriptDaemonGenerator
50 {
51
52
53
54 private DaemonGenerator genericDaemonGenerator;
55
56 protected AbstractBooterDaemonGenerator ( String platformName )
57 {
58 super ( platformName );
59 }
60
61
62
63
64
65 public void generate ( DaemonGenerationRequest request )
66 throws DaemonGeneratorException
67 {
68 Daemon daemon = request.getDaemon ( );
69 JvmSettings jvmSettings = daemon.getJvmSettings ( );
70
71 File outputDirectory = request.getOutputDirectory ( );
72
73
74
75
76
77 request.setOutputDirectory ( new File ( outputDirectory, "etc" ) );
78
79
80
81
82
83
84 daemon.setJvmSettings ( null );
85
86 genericDaemonGenerator.generate ( request );
87
88
89 daemon.setJvmSettings ( jvmSettings );
90
91
92
93
94
95 Daemon booterDaemon = new Daemon ( );
96 booterDaemon.setId ( daemon.getId ( ) );
97 booterDaemon.setEnvironmentSetupFileName ( daemon.getEnvironmentSetupFileName ( ) );
98 booterDaemon.setModelEncoding ( daemon.getModelEncoding ( ) );
99
100 booterDaemon.setMainClass ( "org.codehaus.mojo.appassembler.booter.AppassemblerBooter" );
101 booterDaemon.setShowConsoleWindow ( daemon.isShowConsoleWindow ( ) );
102
103 booterDaemon.setJvmSettings ( jvmSettings );
104
105 MavenProject project = request.getMavenProject ( );
106
107 Classpath classpath = new Classpath ( );
108 booterDaemon.setClasspath ( classpath );
109 classpath.addDirectory ( createDirectory ( "etc" ) );
110 classpath.addDependency ( createDependency ( project, "org.codehaus.mojo.appassembler:appassembler-booter",
111 request.getRepositoryLayout ( ) ) );
112
113
114 classpath.addDependency ( createDependency ( project, "org.codehaus.mojo.appassembler:appassembler-model",
115 request.getRepositoryLayout ( ) ) );
116 classpath.addDependency ( createDependency ( project, "org.codehaus.plexus:plexus-utils",
117 request.getRepositoryLayout ( ) ) );
118 classpath.addDependency ( createDependency ( project, "stax:stax-api",
119 request.getRepositoryLayout ( ) ) );
120 classpath.addDependency ( createDependency ( project, "stax:stax",
121 request.getRepositoryLayout ( ) ) );
122
123
124 scriptGenerator.createBinScript ( getPlatformName ( ), booterDaemon, outputDirectory, "bin" );
125 }
126
127
128
129
130
131 private static Dependency createDependency ( MavenProject project, String id,
132 ArtifactRepositoryLayout artifactRepositoryLayout )
133 throws DaemonGeneratorException
134 {
135 Artifact artifact = ( Artifact ) project.getArtifactMap ( ).get ( id );
136
137 if ( artifact == null )
138 {
139 throw new DaemonGeneratorException ( "The project has to have a dependency on '" + id + "'." );
140 }
141
142 Dependency dependency = new Dependency ( );
143
144 dependency.setRelativePath ( artifactRepositoryLayout.pathOf ( artifact ) );
145 return dependency;
146 }
147
148 private static Directory createDirectory ( String relativePath )
149 {
150 Directory directory = new Directory ( );
151 directory.setRelativePath ( relativePath );
152 return directory;
153 }
154 }