<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements.  See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership.  The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License.  You may obtain a copy of the License at
  ~
  ~     http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

<assembly>
	<id>test-jar</id>
	<formats>
		<format>jar</format>
	</formats>
	<includeBaseDirectory>false</includeBaseDirectory>
	<fileSets>
		<fileSet>
			<directory>${project.build.testOutputDirectory}</directory>
			<outputDirectory>/</outputDirectory>
			<!--modify/add include to match your package(s) -->
			<includes>
				<include>org/apache/flink/test/classloading/jar/StreamingCustomInputSplitProgram.class</include>
				<include>org/apache/flink/test/classloading/jar/StreamingCustomInputSplitProgram$*.class</include>
			</includes>
		</fileSet>
	</fileSets>
</assembly>