1 package org.apache.maven.toolchain.java;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.util.Map.Entry;
24 import java.util.Properties;
25
26 import javax.inject.Named;
27 import javax.inject.Singleton;
28
29 import org.apache.maven.toolchain.MisconfiguredToolchainException;
30 import org.apache.maven.toolchain.RequirementMatcher;
31 import org.apache.maven.toolchain.RequirementMatcherFactory;
32 import org.apache.maven.toolchain.ToolchainFactory;
33 import org.apache.maven.toolchain.ToolchainPrivate;
34 import org.apache.maven.toolchain.model.ToolchainModel;
35 import org.codehaus.plexus.util.FileUtils;
36 import org.codehaus.plexus.util.xml.Xpp3Dom;
37 import org.slf4j.Logger;
38 import org.slf4j.LoggerFactory;
39
40
41
42
43
44
45
46
47
48 @Named( "jdk" )
49 @Singleton
50 public class JavaToolchainFactory
51 implements ToolchainFactory
52 {
53 private final Logger logger = LoggerFactory.getLogger( getClass() );
54
55 public ToolchainPrivate createToolchain( ToolchainModel model )
56 throws MisconfiguredToolchainException
57 {
58 if ( model == null )
59 {
60 return null;
61 }
62
63
64
65 @SuppressWarnings( "deprecation" )
66 JavaToolchainImpl jtc = new DefaultJavaToolChain( model, logger );
67
68
69 Properties provides = model.getProvides();
70 for ( Entry<Object, Object> provide : provides.entrySet() )
71 {
72 String key = (String) provide.getKey();
73 String value = (String) provide.getValue();
74
75 if ( value == null )
76 {
77 throw new MisconfiguredToolchainException(
78 "Provides token '" + key + "' doesn't have any value configured." );
79 }
80
81 RequirementMatcher matcher;
82 if ( "version".equals( key ) )
83 {
84 matcher = RequirementMatcherFactory.createVersionMatcher( value );
85 }
86 else
87 {
88 matcher = RequirementMatcherFactory.createExactMatcher( value );
89 }
90
91 jtc.addProvideToken( key, matcher );
92 }
93
94
95 Xpp3Dom dom = ( Xpp3Dom ) model.getConfiguration();
96 Xpp3Dom javahome = dom != null ? dom.getChild( JavaToolchainImpl.KEY_JAVAHOME ) : null;
97 if ( javahome == null )
98 {
99 throw new MisconfiguredToolchainException( "Java toolchain without the "
100 + JavaToolchainImpl.KEY_JAVAHOME + " configuration element." );
101 }
102 File normal = new File( FileUtils.normalize( javahome.getValue() ) );
103 if ( normal.exists() )
104 {
105 jtc.setJavaHome( FileUtils.normalize( javahome.getValue() ) );
106 }
107 else
108 {
109 throw new MisconfiguredToolchainException( "Non-existing JDK home configuration at "
110 + normal.getAbsolutePath() );
111 }
112
113 return jtc;
114 }
115
116 public ToolchainPrivate createDefaultToolchain()
117 {
118
119
120 return null;
121 }
122
123 protected Logger getLogger()
124 {
125 return logger;
126 }
127
128 }