in maven2-plugins/myfaces-jdev-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/jdeveloper/JDeveloperMojo.java [1383:1490]
private void copyTagLibraries(File projectDir, List dependencies,
List artifacts)
throws IOException
{
File targetDir = new File(projectDir, "src/main/webapp/WEB-INF");
for (Iterator i = dependencies.iterator(); i.hasNext(); )
{
Dependency dependency = (Dependency) i.next();
MavenProject dependentProject =
findDependentProject(dependency.getManagementKey());
if (dependentProject != null)
{
List resourceRoots = dependentProject.getResources();
for (Iterator j = resourceRoots.iterator(); j.hasNext(); )
{
Resource resource = (Resource) j.next();
String resourceRoot = resource.getDirectory();
File resourceDirectory = new File(resourceRoot);
if (resourceDirectory.exists())
{
DirectoryScanner scanner = new DirectoryScanner();
scanner.setBasedir(resourceRoot);
scanner.addDefaultExcludes();
scanner.setIncludes(new String[]
{ "META-INF/*.tld" });
scanner.scan();
String[] tldFiles = scanner.getIncludedFiles();
for (int k = 0; k < tldFiles.length; k++)
{
File sourceFile = new File(resourceDirectory, tldFiles[k]);
File targetFile = new File(targetDir, sourceFile.getName());
if (targetFile.exists())
{
targetFile.delete();
}
FileUtils.copyFile(sourceFile, targetFile);
}
}
}
}
}
Map sourceMap = new TreeMap();
for (Iterator i = artifacts.iterator(); i.hasNext(); )
{
Artifact artifact = (Artifact) i.next();
if (!isDependentProject(artifact.getDependencyConflictId()) &&
"jar".equals(artifact.getType()))
{
File file = artifact.getFile();
JarFile jarFile = new JarFile(file);
Enumeration jarEntries = jarFile.entries();
while (jarEntries.hasMoreElements())
{
JarEntry jarEntry = (JarEntry) jarEntries.nextElement();
String name = jarEntry.getName();
if (name.startsWith("META-INF/") && name.endsWith(".tld"))
{
List taglibs = (List) sourceMap.get(name);
if (taglibs == null)
{
taglibs = new ArrayList();
sourceMap.put(name, taglibs);
}
taglibs.add(file);
}
}
}
}
for (Iterator i = sourceMap.entrySet().iterator(); i.hasNext(); )
{
Map.Entry e = (Map.Entry) i.next();
List taglibs = (List) e.getValue();
String name = (String) e.getKey();
for (Iterator ti = taglibs.iterator(); ti.hasNext(); )
{
File file = (File) ti.next();
File sourceFile = new File(name);
StringBuffer buff = new StringBuffer(sourceFile.getName());
if (taglibs.size() > 1)
{
String jarName =
file.getName().substring(0, file.getName().length() -
".jar".length());
buff.insert(buff.length() - ".tld".length(), "-" + jarName);
}
URL jarURL = file.toURL();
URL sourceURL =
new URL("jar:" + jarURL.toExternalForm() + "!/" + name);
File targetFile = new File(targetDir, buff.toString());
if (targetFile.exists())
{
targetFile.delete();
}
FileUtils.copyURLToFile(sourceURL, targetFile);
targetFile.setReadOnly();
}
}
}