diff --git a/jps/antLayout/src/jetbrains/antlayout/datatypes/ZipContainer.java b/jps/antLayout/src/jetbrains/antlayout/datatypes/ZipContainer.java index f96476643fd0..e22c7ac583c0 100644 --- a/jps/antLayout/src/jetbrains/antlayout/datatypes/ZipContainer.java +++ b/jps/antLayout/src/jetbrains/antlayout/datatypes/ZipContainer.java @@ -1,84 +1,83 @@ -package jetbrains.antlayout.datatypes; - -import jetbrains.antlayout.util.TempFileFactory; -import jetbrains.antlayout.util.LayoutFileSet; -import org.apache.tools.ant.taskdefs.Zip; -import org.apache.tools.ant.BuildException; - -import java.io.File; -import java.util.Arrays; -import java.util.List; - -/** - * @author max - */ -public class ZipContainer extends Container { - private String name; - protected Zip task; - - public ZipContainer() { - task = createTask(); - task.setCompress(false); // Default compress is false - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public List build(TempFileFactory temp) { - List built = super.build(temp); - File dest = temp.allocateTempFile(name); - - task.setProject(getProject()); - task.setDestFile(dest); - - for (LayoutFileSet set : built) { - task.addZipfileset(set); - } - - LayoutFileSet result = new LayoutFileSet(); - result.setFile(dest); - - task.perform(); - - return Arrays.asList(result); - } - - protected Zip createTask() { - Zip task = new Zip(); - task.setTaskName("zip"); - return task; - } - - public void setCompress(boolean compress) { - task.setCompress(compress); - } - - public void setFilesonly(boolean f) { - task.setFilesonly(f); - } - - public void setDuplicate(Zip.Duplicate df) { - task.setDuplicate(df); - } - - public void setEncoding(String encoding) { - task.setEncoding(encoding); - } - - public void setBasedir(File baseDir) { - task.setBasedir(baseDir); - } - - public void validateArguments() throws BuildException { - super.validateArguments(); - - if (name == null) { - throw new BuildException("name attribute must be specified for zipentry or jarentry"); - } - } -} +package jetbrains.antlayout.datatypes; + +import jetbrains.antlayout.util.TempFileFactory; +import jetbrains.antlayout.util.LayoutFileSet; +import org.apache.tools.ant.taskdefs.Zip; +import org.apache.tools.ant.BuildException; + +import java.io.File; +import java.util.Arrays; +import java.util.List; + +/** + * @author max + */ +public class ZipContainer extends Container { + private String name; + protected Zip task; + + public ZipContainer() { + task = createTask(); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List build(TempFileFactory temp) { + List built = super.build(temp); + File dest = temp.allocateTempFile(name); + + task.setProject(getProject()); + task.setDestFile(dest); + + for (LayoutFileSet set : built) { + task.addZipfileset(set); + } + + LayoutFileSet result = new LayoutFileSet(); + result.setFile(dest); + + task.perform(); + + return Arrays.asList(result); + } + + protected Zip createTask() { + Zip task = new Zip(); + task.setTaskName("zip"); + return task; + } + + public void setCompress(boolean compress) { + task.setCompress(compress); + } + + public void setFilesonly(boolean f) { + task.setFilesonly(f); + } + + public void setDuplicate(Zip.Duplicate df) { + task.setDuplicate(df); + } + + public void setEncoding(String encoding) { + task.setEncoding(encoding); + } + + public void setBasedir(File baseDir) { + task.setBasedir(baseDir); + } + + public void validateArguments() throws BuildException { + super.validateArguments(); + + if (name == null) { + throw new BuildException("name attribute must be specified for zipentry or jarentry"); + } + } +} diff --git a/jps/src/org/jetbrains/jps/Jps.groovy b/jps/src/org/jetbrains/jps/Jps.groovy index b373f14ffb7c..466f820bcc0b 100644 --- a/jps/src/org/jetbrains/jps/Jps.groovy +++ b/jps/src/org/jetbrains/jps/Jps.groovy @@ -39,7 +39,7 @@ final class Jps { binding.setVariable("layout", {String dir, Closure body -> def old = binding.getVariable("module") - ["module", "jar", "zip", "dir"].each {tag -> + ["module", "zip", "dir"].each {tag -> binding.setVariable(tag, {Object[] args -> if (args.length == 1) { binding.ant."$tag"(name: args[0]) @@ -52,6 +52,14 @@ final class Jps { } }) } + binding.setVariable("jar", {Object[] args -> + if (args.length == 2) { + binding.ant.jar(name: args[0], compress: project.builder.compressJars, args[1]) + } + else { + project.error("unexpected number of parameters for 'jar' task: $args.length") + } + }) binding.setVariable("renamedFile", {Object[] args -> if (args.length != 2) { diff --git a/jps/src/org/jetbrains/jps/ProjectBuilder.groovy b/jps/src/org/jetbrains/jps/ProjectBuilder.groovy index f2348e458ab6..cc8d3b3c84a7 100644 --- a/jps/src/org/jetbrains/jps/ProjectBuilder.groovy +++ b/jps/src/org/jetbrains/jps/ProjectBuilder.groovy @@ -30,6 +30,7 @@ class ProjectBuilder { final List listeners = [new BuildStatisticsListener()] BuildInfoPrinter buildInfoPrinter = new DefaultBuildInfoPrinter() boolean useInProcessJavac + boolean compressJars = true def ProjectBuilder(GantBinding binding, Project project) { this.project = project diff --git a/jps/src/org/jetbrains/jps/artifacts/CompositeLayoutElement.groovy b/jps/src/org/jetbrains/jps/artifacts/CompositeLayoutElement.groovy index e0a6099fcf38..949abb85a576 100644 --- a/jps/src/org/jetbrains/jps/artifacts/CompositeLayoutElement.groovy +++ b/jps/src/org/jetbrains/jps/artifacts/CompositeLayoutElement.groovy @@ -2,7 +2,7 @@ package org.jetbrains.jps.artifacts import org.jetbrains.jps.Project -/** + /** * @author nik */ abstract class CompositeLayoutElement extends LayoutElement { @@ -60,8 +60,9 @@ class ArchiveElement extends CompositeLayoutElement { def build(Project project) { if (name.endsWith(".jar")) { - project.binding.ant.jar(name: name, filesetmanifest: "mergewithoutmain", duplicate: "preserve", { - buildChildren(project) + project.binding.ant.jar(name: name, filesetmanifest: "mergewithoutmain", duplicate: "preserve", + compress: project.builder.compressJars, { + buildChildren(project) }) } else { diff --git a/jps/src/org/jetbrains/jps/idea/IdeaProjectLoader.groovy b/jps/src/org/jetbrains/jps/idea/IdeaProjectLoader.groovy index 423f35e4197a..be86d4e618f2 100644 --- a/jps/src/org/jetbrains/jps/idea/IdeaProjectLoader.groovy +++ b/jps/src/org/jetbrains/jps/idea/IdeaProjectLoader.groovy @@ -150,13 +150,13 @@ public class IdeaProjectLoader { private def loadProjectJdkAndOutput(Node root) { def componentTag = getComponent(root, "ProjectRootManager") - def sdkName = componentTag."@project-jdk-name" + def sdkName = componentTag?."@project-jdk-name" def sdk = project.sdks[sdkName] if (sdk == null) { project.info("Project SDK '$sdkName' is not defined. Embedded javac will be used") } - def outputTag = componentTag.output[0]; - String outputPath = outputTag != null ? pathFromUrl(outputTag.'@url') : null; + def outputTag = componentTag?.output?.getAt(0) + String outputPath = outputTag != null ? pathFromUrl(outputTag.'@url') : null projectOutputPath = outputPath != null && outputPath.length() > 0 ? projectMacroExpander.expandMacros(outputPath) : null project.projectSdk = sdk } diff --git a/jps/testData/compressTest/compressTest.ipr b/jps/testData/compressTest/compressTest.ipr new file mode 100644 index 000000000000..1949d233e6e0 --- /dev/null +++ b/jps/testData/compressTest/compressTest.ipr @@ -0,0 +1,12 @@ + + + + + $PROJECT_DIR$/out/ + + + + + + + diff --git a/jps/testData/compressTest/data/a.txt b/jps/testData/compressTest/data/a.txt new file mode 100644 index 000000000000..9e77bd9e1c87 --- /dev/null +++ b/jps/testData/compressTest/data/a.txt @@ -0,0 +1,90 @@ +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string +Some very very very very very very very very very very very very very very very very very very very very very very very very long string diff --git a/jps/testSrc/org/jetbrains/jps/CompressTest.groovy b/jps/testSrc/org/jetbrains/jps/CompressTest.groovy new file mode 100644 index 000000000000..820b62f1b482 --- /dev/null +++ b/jps/testSrc/org/jetbrains/jps/CompressTest.groovy @@ -0,0 +1,25 @@ +package org.jetbrains.jps + +/** + * @author nik + */ +class CompressTest extends JpsBuildTestCase { + public void testCompress() throws Exception { + File jarFile = doBuildJar({}) + assertTrue(jarFile.size() < 1000) + } + + public void testNotCompress() throws Exception { + File jarFile = doBuildJar {Project project -> + project.builder.compressJars = false + } + assertTrue(jarFile.size() > 5000) + } + + private File doBuildJar(Closure initProject) { + Project project = buildAll("testData/compressTest/compressTest.ipr", [:], initProject) + File jarFile = new File(project.targetFolder + "/artifacts/data/data.jar") + assertTrue("$jarFile.absolutePath doesn't exist", jarFile.exists()) + return jarFile + } +} diff --git a/jps/testSrc/org/jetbrains/jps/JpsBuildTestCase.groovy b/jps/testSrc/org/jetbrains/jps/JpsBuildTestCase.groovy index e1bbc360bd39..64e68f32d4d4 100644 --- a/jps/testSrc/org/jetbrains/jps/JpsBuildTestCase.groovy +++ b/jps/testSrc/org/jetbrains/jps/JpsBuildTestCase.groovy @@ -16,6 +16,14 @@ abstract class JpsBuildTestCase extends TestCase { } def doTest(String projectPath, Map pathVariables, Closure initProject, Closure expectedOutput) { + Project project = buildAll(projectPath, pathVariables, initProject) + + def root = new FileSystemItem(name: "") + initFileSystemItem(root, expectedOutput) + root.assertDirectoryEqual(new File(project.targetFolder), ""); + } + + def protected buildAll(String projectPath, Map pathVariables, Closure initProject) { def binding = new GantBinding() binding.includeTool << Jps def project = new Project(binding) @@ -26,10 +34,7 @@ abstract class JpsBuildTestCase extends TestCase { project.clean() project.makeAll() project.buildArtifacts() - - def root = new FileSystemItem(name: "") - initFileSystemItem(root, expectedOutput) - root.assertDirectoryEqual(target, ""); + return project } def initFileSystemItem(FileSystemItem item, Closure initializer) {