AddCommonSources.java
上传用户:xfwatch
上传日期:2020-12-14
资源大小:872k
文件大小:3k
源码类别:

中间件编程

开发平台:

Java

  1. package org.jboss.blacktie.plugins;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.OutputStream;
  7. import java.util.Iterator;
  8. import java.util.List;
  9. import java.util.zip.ZipEntry;
  10. import java.util.zip.ZipInputStream;
  11. import org.apache.maven.model.Resource;
  12. import org.apache.maven.project.MavenProject;
  13. import org.apache.tools.ant.BuildException;
  14. import org.apache.tools.ant.Task;
  15. import org.apache.tools.ant.types.Reference;
  16. public class AddCommonSources extends Task {
  17. private Reference mavenProjectRef;
  18. private String outputDir = "target";
  19. private String includes = ".*";
  20. public void execute() throws BuildException {
  21. MavenProject p = (MavenProject) mavenProjectRef.getProject().getReference(mavenProjectRef.getRefId());
  22. processResources(p);
  23. }
  24. public void setMavenProject(Reference ref) {
  25. this.mavenProjectRef = ref;
  26. }
  27. public void setOutputDir(String outDir) {
  28. this.outputDir = outDir;
  29. }
  30. /**
  31.          * Pattern for matching which resources get included.
  32.          * See java.util.regex.Pattern for valid pattern syntax.
  33.          */
  34. public void setIncludes(String includes) {
  35. this.includes = includes;
  36. }
  37. private void processResources(MavenProject p) {
  38. List resources = p.getResources();
  39. if (resources != null) {
  40. for (Iterator i = resources.iterator(); i.hasNext();) {
  41. Resource resource = (Resource) i.next();
  42. String resourceRoot = resource.getDirectory();
  43. //System.out.println("adding source root: " + outputDir + " from resource " + resource.toString());
  44. unzip(getClass().getResourceAsStream("/cxx.jar"), outputDir, includes);
  45. //p.addCompileSourceRoot(outputDir);
  46. p.addTestCompileSourceRoot(outputDir);
  47. }
  48. }
  49. }
  50. private static void unzip(InputStream from, String to, String pattern) {
  51. //System.out.println("from: " + from + " to: " + to + " pattern: " + pattern);
  52. if (from == null || to == null)
  53. return;
  54. try {
  55. ZipInputStream zs = new ZipInputStream(from);
  56. ZipEntry ze;
  57. while ((ze = zs.getNextEntry()) != null)
  58. {
  59. String fname = to + '/' + ze.getName();
  60. //System.out.println(fname);
  61. boolean match = (pattern == null || ze.getName().matches(pattern));
  62. if (ze.isDirectory())
  63. new File(fname).mkdirs();
  64. else if (match)
  65. externalizeFile(fname, zs);
  66. else
  67. readFile(fname, zs);
  68. zs.closeEntry();
  69. }
  70. zs.close();
  71. } catch (IOException e) {
  72. e.printStackTrace();
  73. throw new RuntimeException("Unable to unpack archive: " + e.getMessage());
  74. }
  75. }
  76. private static void readFile(String fname, InputStream is) throws IOException
  77. {
  78. File f = new File(fname);
  79. byte[] buf = new byte[1024];
  80. int len;
  81. while ((len = is.read(buf)) > 0)
  82. ;
  83. }
  84. private static File externalizeFile(String fname, InputStream is) throws IOException
  85. {
  86. File f = new File(fname);
  87. OutputStream out = new FileOutputStream(f);
  88. byte[] buf = new byte[1024];
  89. int len;
  90. while ((len = is.read(buf)) > 0)
  91. out.write(buf, 0, len);
  92. out.close();
  93. return f;
  94. }
  95. }