131 "--add-modules", "m1", 132 "--bind-services", 133 "--verbose", 134 "--limit-modules", "m1,m2,m3,java.base").output(); 135 136 List<String> expected = List.of( 137 "module m1 (" + MODS_DIR.resolve("m1").toUri().toString() + ")", 138 "module m2 (" + MODS_DIR.resolve("m2").toUri().toString() + ")", 139 "module m3 (" + MODS_DIR.resolve("m3").toUri().toString() + ")", 140 "module m1 provides p1.S, used by m1", 141 "module m2 provides p1.S, used by m1", 142 "module m2 provides p2.T, used by m2", 143 "module m3 provides p2.T, used by m2" 144 ); 145 146 assertTrue(output.containsAll(expected)); 147 148 testImage(dir, "m1", "m2", "m3"); 149 } 150 151 /* 152 * Tests the given ${java.home} to only contain the specified modules 153 */ 154 private void testImage(Path javaHome, String... modules) throws Throwable { 155 Path java = javaHome.resolve("bin").resolve("java"); 156 String[] cmd = Stream.concat( 157 Stream.of(java.toString(), "-m", "m1/p1.Main"), 158 Stream.of(modules)).toArray(String[]::new); 159 160 assertTrue(executeProcess(cmd).outputTo(System.out) 161 .errorTo(System.out) 162 .getExitValue() == 0); 163 } 164 165 static class JLink { 166 static final ToolProvider JLINK_TOOL = ToolProvider.findFirst("jlink") 167 .orElseThrow(() -> 168 new RuntimeException("jlink tool not found") 169 ); 170 | 131 "--add-modules", "m1", 132 "--bind-services", 133 "--verbose", 134 "--limit-modules", "m1,m2,m3,java.base").output(); 135 136 List<String> expected = List.of( 137 "module m1 (" + MODS_DIR.resolve("m1").toUri().toString() + ")", 138 "module m2 (" + MODS_DIR.resolve("m2").toUri().toString() + ")", 139 "module m3 (" + MODS_DIR.resolve("m3").toUri().toString() + ")", 140 "module m1 provides p1.S, used by m1", 141 "module m2 provides p1.S, used by m1", 142 "module m2 provides p2.T, used by m2", 143 "module m3 provides p2.T, used by m2" 144 ); 145 146 assertTrue(output.containsAll(expected)); 147 148 testImage(dir, "m1", "m2", "m3"); 149 } 150 151 @Test 152 public void testVerboseAndNoBindServices() throws Throwable { 153 if (!hasJmods()) return; 154 155 Path dir = Paths.get("verboseNoop"); 156 157 List<String> output = 158 JLink.run("--output", dir.toString(), 159 "--module-path", MODULE_PATH, 160 "--verbose", 161 "--add-modules", "m1").output(); 162 163 assertTrue(output.contains("module m1 provides p1.S, used by m1")); 164 165 testImage(dir, "m1"); 166 } 167 168 /* 169 * Tests the given ${java.home} to only contain the specified modules 170 */ 171 private void testImage(Path javaHome, String... modules) throws Throwable { 172 Path java = javaHome.resolve("bin").resolve("java"); 173 String[] cmd = Stream.concat( 174 Stream.of(java.toString(), "-m", "m1/p1.Main"), 175 Stream.of(modules)).toArray(String[]::new); 176 177 assertTrue(executeProcess(cmd).outputTo(System.out) 178 .errorTo(System.out) 179 .getExitValue() == 0); 180 } 181 182 static class JLink { 183 static final ToolProvider JLINK_TOOL = ToolProvider.findFirst("jlink") 184 .orElseThrow(() -> 185 new RuntimeException("jlink tool not found") 186 ); 187 |