maven使用問題

maven使用問題

maven的moudle之間的引用

直接在moudel中調用了這個moudel類

<dependency>
    <groupId>${moudel groupid}</groupId>
    <artifactId>${moudel artifactId}</artifactId>
    <version>${version}</version>
</dependency>

maven的<dependencies>節點和<dependencyManagement>節點的區別

Maven 使用dependencyManagement 元素來提供了一種管理依賴版本號的方式。通常會在一個組織或者項目的最頂層的父POM 中看到dependencyManagement 元素。使用pom.xml 中的dependencyManagement 元素能讓
所有在子項目中引用一個依賴而不用顯式的列出版本號。Maven 會沿着父子層次向上走,直到找到一個擁有dependencyManagement 元素的項目,然後它就會使用在這個dependencyManagement 元素中指定的版本號

dependencyManagement 中的 dependencies 元素只表明依賴項版本的優先選擇,並不影響項目的依賴項;而 dependencies 元素則影響項目的依賴項。

只有當 外層的dependencies 元素中沒有指明版本信息時, dependencyManagement中的 dependencies 元素才起作用。

注意:一個是項目依賴,一個是多模塊maven項目時候的依賴管理控制的。

maven的moudle引用找到類

在本地倉庫未找到類

mvn -X clean install

maven找不到main函數

使用maven-jar-plugin的打包方式問題

maven打包方式

使用插件maven-jar-plugin

默認的打包插件,用來打普通的project JAR包

 <build>
        <plugins>
            <!-- 用於複製文件到編譯的lib中-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.1.1</version>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>
                                ${project.build.directory}/lib
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <!-- 用於打jar並指定main方法 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>com.serina.gren.chatroom.NettyChatServer</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>

使用插件maven-shade-plugin

用來打可執行JAR包,也就是所謂的fat JAR包;

 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.serina.gren.chatroom.NettyChatClient</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

使用插件maven-assembly-plugin

支持自定義的打包結構,也可以定製依賴項等

我們日常使用的以maven-assembly-plugin爲最多,因爲大數據項目中往往有很多shell腳本、SQL腳本、.properties及.xml配置項等,採用assembly插件可以讓輸出的結構清晰而標準化。

<!-- Maven Assembly Plugin -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.4.1</version>
    <configuration>
        <!-- get all project dependencies -->
        <!-- 也可以使用Maven預配置的描述符 
		 -- 配置描述符文件和預配置的描述符  二選一 --
         <descriptor>src/main/assembly/assembly.xml</descriptor>
		-->
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <!-- MainClass in mainfest make a executable jar -->
        <archive>
            <manifest>
                <mainClass>cn.dubby.maven.assembly.plugin.Main</mainClass>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <!-- bind to the packaging phase -->
            <!-- 綁定到package生命週期 -->
            <phase>package</phase>
            <goals>
                <!-- 只運行一次 -->
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

自定義描述文件 assembly.xml

<assembly>
    <id>assembly</id>

    <formats>
        <format>tar.gz</format>
    </formats>

    <includeBaseDirectory>true</includeBaseDirectory>

    <fileSets>
        <fileSet>
            <directory>src/main/bin</directory>
            <includes>
                <include>*.sh</include>
            </includes>
            <outputDirectory>bin</outputDirectory>
            <fileMode>0755</fileMode>
        </fileSet>
        <fileSet>
            <directory>src/main/conf</directory>
            <outputDirectory>conf</outputDirectory>
        </fileSet>
        <fileSet>
            <directory>src/main/sql</directory>
            <includes>
                <include>*.sql</include>
            </includes>
            <outputDirectory>sql</outputDirectory>
        </fileSet>
        <fileSet>
            <directory>target/classes/</directory>
            <includes>
                <include>*.properties</include>
                <include>*.xml</include>
                <include>*.txt</include>
            </includes>
            <outputDirectory>conf</outputDirectory>
        </fileSet>
    </fileSets>

    <files>
        <file>
            <source>target/${project.artifactId}-${project.version}.jar</source>
            <outputDirectory>.</outputDirectory>
        </file>
    </files>

    <dependencySets>
        <dependencySet>
            <unpack>false</unpack>
            <scope>runtime</scope>
            <outputDirectory>lib</outputDirectory>
        </dependencySet>
    </dependencySets>
</assembly>

參考

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