用Maven寫了個scala項目,項目裏有shell腳本。
1.須要把scala代碼打成一個jar包,調用shell腳原本執行jar包。
2.整個項目的目錄結構仿照Apache的項目那樣,bin和sbin存放shell腳本,conf存放配置文件,lib存放依賴包,logs存放日誌,外面還有個README.md文件。shell
pom.xml中<build>
標籤裏添加scala插件apache
<plugin> <groupId>org.scala-tools</groupId> <artifactId>maven-scala-plugin</artifactId> <version>2.15.2</version> <executions> <execution> <id>scala-compile-first</id> <goals> <goal>compile</goal> </goals> <configuration> <includes> <include>**/*.scala</include> </includes> </configuration> </execution> </executions> </plugin>
pom.xml中<build>
標籤裏添加assembly插件maven
<!-- 打tar包 --> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptors> <!-- 描述文件路徑 --> <descriptor>assembly.xml</descriptor> </descriptors> </configuration> <executions> <execution> <!--名字任意 --> <id>make-tar-assembly</id> <!-- 綁定到package生命週期階段上 --> <phase>package</phase> <goals> <!-- 只運行一次 --> <goal>single</goal> </goals> </execution> </executions> </plugin>
assembly插件的描述文件assembly.xmlui
<assembly> <!-- 打出的包名添加的內容 --> <id>release</id> <formats> <!-- 這裏指明打tar.gz的壓縮包 --> <format>tar.gz</format> </formats> <!-- tar包 --> <includeBaseDirectory>true</includeBaseDirectory> <dependencySets> <dependencySet> <unpack>false</unpack> <scope>runtime</scope> <outputDirectory>lib</outputDirectory> <!-- lib中的依賴包是否包含本身寫的代碼打成的jar包 --> <useProjectArtifact>true</useProjectArtifact> </dependencySet> </dependencySets> <fileSets> <fileSet> <!-- 想要複製的文件目錄 --> <directory>bin</directory> <!-- 複製到tar包中的目錄 --> <outputDirectory>bin</outputDirectory> </fileSet> <fileSet> <directory>sbin</directory> <outputDirectory>sbin</outputDirectory> </fileSet> <fileSet> <directory>logs</directory> <outputDirectory>logs</outputDirectory> </fileSet> <fileSet> <directory>conf</directory> <outputDirectory>conf</outputDirectory> </fileSet> </fileSets> <files> <file> <!-- 想要複製的文件 --> <source>README.md</source> <!-- 複製到tar包中目錄 --> <outputDirectory>.</outputDirectory> </file> </files> </assembly>
按照上面的配置,assembly打tar包會自動將scala代碼打一個jar包,並把jar包複製到tar包中的lib目錄下。可是這個jar包是沒有主類的,沒法執行。因此須要設置一下這個jar包的主類和依賴類路徑。
在pom.xml的<build>
標籤裏添加jar插件spa
<!-- 打jar包 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.6</version> <configuration> <archive> <!-- 定義jar包中MANIFEST.MF文件 --> <manifest> <addClasspath>true</addClasspath> <!-- 依賴包路徑前綴,這裏本jar包與它依賴的jar包都放置在lib中,因此前綴就是當前目錄,不填便可 --> <classpathPrefix/> <mainClass>GraphDBLoaderSparkRunner</mainClass> </manifest> </archive> </configuration> </plugin>
可見不管在<build>
標籤中,plugin配置順序與執行順序無關,先編譯,再打jar包,最後assembly。
解壓進入目錄
插件
完!scala