maven工程打包遇到Unable to locate Spring NamespaceHandler for XML schema namespace問題

        以下的內容只是作爲自己學習的一個記錄,如果有錯或者涉及您的內容,請私信告知,不喜勿噴!謝謝!

       當你在本地電腦上用eclipse寫了一個普通的maven工程,而且將來要放到服務器上,你就需要用到maven的打包,由於是一個普通的java項目,所以只需打包成jar包就可以了(web項目需要打包成war包).我們只需要在pom.xml上加上相應的插件就可以了,最後我選擇了maven-shade-plugin這種方式用來打包.在我第一次接觸的時候,我用到了二種打jar包的插件,maven-assembly-plugin和maven-shade-plugin.pom.xml內容如下

 <plugin>

<artifactId>maven-assembly-plugin</artifactId>
                <version>2.2-beta-5</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.xxx.xxx</mainClass>   包含main方法的類
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef> 將依賴包一起打包
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>                        執行器 mvn assembly:assembly
                        <id>make-assembly</id>         是個名字,可以任意
                        <phase>package</phase>         綁定到package生命週期階段上
                        <goals>
                            <goal>single</goal>        只運行一次
                        </goals>
                    </execution>
                </executions>
    </plugin>




 <plugin>

    <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>1.7.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <filters>
                            <filter>
                                <artifact>:</artifact>
                                <excludes>
                                    <exclude>META-INF/*.SF</exclude>
                                    <exclude>META-INF/*.DSA</exclude>
                                    <exclude>META-INF/*.RSA</exclude>
                                </excludes>
                            </filter>
                        </filters>
                        <transformers>
                            <transformer
                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.xxx.xxx</mainClass>
                            </transformer>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                <resource>META-INF/spring.handlers</resource>
                            </transformer>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                <resource>META-INF/spring.schemas</resource>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>

         上述兩種方法中的mainclass標籤是你寫的項目中,包含main方法的類,至於我爲什麼最終會選擇maven-shade-plugin這種方式,是因爲之前在使用maven-assembly-plugin的時候,在本地運行沒有任何問題,而當我們放到linux上運行jar包的時候,就會出現錯誤Unable to locate Spring NamespaceHandler for XML schema namespace[http://www.springframework.org/schema/context]等等之類的錯誤,錯誤原因大概是因爲由於項目中用到了spring框架,而當我們在項目中使用spring的多個內容的時候,包含了相同名字的文件,通過看網上的解決辦法,發現maven-shade-plugin這個插件的打jar包方式可以解決該問題,上述pom.xml上的<transformer>標籤中的內容就是解決該問題的!

    另外將自己將jar包上傳到linux的一些內容記錄一下:使用的是SecureCRTPortable工具中的SFTP方式,找到自己本地電腦jar包的存放位置,命令是lcd+存放路徑,然後使用  put+該jar包名字   的方式進行上傳,linux上運行jar包方法 java -jar -xxx,命令中的xxx是jar包名字,ps -ef | grep java 可以看到正在運行的java進程!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章