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,创建的文件时,默认抹去某个属性,在这里插入图片描述但是这个不是永久的,并且我发现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.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.6.0</version>
        <executions>
            <execution>
                <id>script-chmod</id>
                <phase>compile</phase>
                <goals>
                    <goal>exec</goal>
                </goals>
                <!-- 看网上不少示例中把configuration放在了错误的位置(executions外面) -->
                <configuration>
                    <executable>chmod</executable>
                <arguments>
                    <argument>0777</argument>
                    <argument>${project.build.directory}</argument>
                    <argument>${project.build.directory}/../logs</argument>
                    <argument>-R</argument>
                </arguments>
                </configuration>
            </execution>
        </executions>
</plugin>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值