191012- exec-maven-plugin mvn项目中执行系统命令-maven

问题起源于Jenkins要以Jenkins用户启动,不能以root用户启动;一般情况下,登录远程主机肯定不是以Jenkins用户登录,所以造成目录访问权限问题,包括maven本地仓库目录权限,java target目录权限,log文件权限

  1. 把Jenkins加入登录用户组 usermod -G -a some_group some_user
  2. 使用umask命令,umask -S 0001,创建的文件时,默认抹去某个属性,191012- exec-maven-plugin mvn项目中执行系统命令-maven_第1张图片但是这个不是永久的,并且我发现umask并不是一个系统命令,而是shell的内置命令,所以需要修改umask就很棘手。后来在SOF上找到:可以修改/etc/login.defs来更改默认的umask值,正如链接中所述,也即umask的注释:需要把USERGROUPS_ENAB置为no,否则某个文件的权限和该文件所有者权限一致,一般也不会有什么问题。
  3. 直接修改相关目录的权限,手动改是 不可能的!后来想到应该使用maven来解决这个问题;首先想到的是assemble文件,不过我误以为这个是只有在package阶段才使用,而且配置中已经有了assemble文件了,就找到了新的插件:应该使用maven exec插件来解决这个问题
  4. 再补充些maven生命周期和目标的知识:来自SOF:https://stackoverflow.com/questions/16205778/what-are-maven-goals-and-phases-and-what-is-their-difference; 执行maven命令时可以指定阶段(mvn test),也可以是目标(mvn exec:exec),一个阶段里可以有很多执行目标
    maven exec插件使用配置如下:
  <plugin>
    <groupId>org.codehaus.mojogroupId>
    <artifactId>exec-maven-pluginartifactId>
    <version>1.6.0version>
        <executions>
            <execution>
                <id>script-chmodid>
                <phase>compilephase>
                <goals>
                    <goal>execgoal>
                goals>
                
                <configuration>
                    <executable>chmodexecutable>
                <arguments>
                    <argument>0777argument>
                    <argument>${project.build.directory}argument>
                    <argument>${project.build.directory}/../logsargument>
                    <argument>-Rargument>
                arguments>
                configuration>
            execution>
        executions>
plugin>

你可能感兴趣的:(软件使用)