Maven打包項目爲jar包,放在CentOS上做爲服務運行

1、Maven打包項目java

  1. 添加依賴,打包插件linux

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.ysxu</groupId>
        <artifactId>Hello</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.26</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>1.2.3</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core -->
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>1.2.3</version>
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <configuration>
                        <appendAssemblyId>false</appendAssemblyId>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                        <archive>
                            <manifest>
                                <!--注意,此處必須是main()方法對應類的完整路徑  -->
                                <mainClass>Main</mainClass>
                            </manifest>
                        </archive>
                    </configuration>
                    <executions>
                        <execution>
                            <id>make-assembly</id>
                            <phase>package</phase>
                            <goals>
                                <goal>assembly</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    
    
    </project>
  2. 編寫Main.javashell

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class Main {
        private static final Logger logger = LoggerFactory.getLogger(Main.class);
    
        public static void main(String[] args) throws InterruptedException {
            while (true){
                logger.info("Hello, Linux");
                Thread.sleep(3000);
            }
        }
    }
  3. 編寫logback.xml配置文件apache

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%red(%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n)</pattern>
            </encoder>
        </appender>
    
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
                <charset>utf-8</charset>
            </encoder>
    <!--        <file>log/output.log</file>-->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>log/%d{yyyy-MM-dd}.log</fileNamePattern>
            </rollingPolicy>
    <!--        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">-->
    <!--            <MaxFileSize>1MB</MaxFileSize>-->
    <!--        </triggeringPolicy>-->
        </appender>
    
        <root level="INFO">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="FILE" />
        </root>
    </configuration>
  4. 打開Maven窗口,依次執行clean--->compile--->packageapi

  5. 生成的jar文件在target目錄下bash

2、將jar文件做爲Linux的服務運行app

  1. 複製jar文件到Linuxmaven

  2. 在與jar文件同一目錄下編寫start.sh,stop.shui

    start.shspa

    #!/bin/bash
    export JAVA_HOME=/usr/local/java/jdk1.8.0_221
    export JRE=/usr/local/java/jdk1.8.0_221/jre
    export CLASSPATH=$JAVA_HOME/lib:$JRE/lib:.
    export PATH=$PATH:$JAVA_HOME/bin/:$JRE/bin
    export PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    nohup java -jar /root/project/Hello-1.0-SNAPSHOT.jar >>/dev/null  2>&1 &
    echo $! > /var/run/Hello-1.0-SNAPSHOT.pid

    stop.sh

    #!/bin/bash
    PID=$(cat /var/run/Hello-1.0-SNAPSHOT.pid)
    kill -9 $PID
  3. 添加hello.service (/usr/lib/systemd/system/hello.service)

    [Unit]
    Description=hello server
    Documentation=
    Before=
    After=
    Wants=
    #Request=
    
    [Service]
    Type=forking
    WorkingDirectory=/root/project
    PermissionsStartOnly=true
    ExecStart=/root/project/start.sh
    
    KillMode=process
    ExecStop=/root/project/stop.sh
    PrivateTmp=true
    
    Restart=always
    RestartSec=2s
    
    LimitCORE=infinity
    
    [Install]
    WantedBy=multi-user.target
  4. 使用命令管理服務

    systemctl start xxx
    systemctl stop xxx 
    systemctl restart xxx
    systemctl enable xxx

3、遇到問題

  1. Failed at step EXEC spawning /usr/local/yealink/ptms/ptms-start.sh: Permission denied

    緣由是沒有執行sh文件的權限,這裏經過chmod 777 ptms-start.sh給相應的文件賦予最高權限便可。

  2. Failed at step EXEC spawning /usr/local/yealink/ptms/ptms.sh: No such file or directory

遇到sh文件找不到,可是確實路徑又沒錯的狀況,能夠試着直接./ptms-start.sh執行sh文件,看看會不會報錯:bad interpreter: No such file or directory,若是會基本就是這個sh文件格式的問題。

緣由在於在window下編輯shell文件,換行符是不同的,會產生不可見字符。我確實有把sh文件在window系統打開編輯過,此時在傳到Linux系統上格式就會發生變化,在Linux上原本應該是unix的,但發現倒是dos格式的。解決辦法就是在linux上修改shell文件格式爲unix便可。

4、參考

  1. http://www.javashuo.com/article/p-dlanqxss-gp.html
  2. https://blog.csdn.net/u012359453/article/details/78707941
相關文章
相關標籤/搜索