Maven basedir - 用正斜杠替换反斜杠

4

我应该如何将基目录(basedir)从一个反斜杠 (\) 替换为两个反斜杠 (\\)?

我尝试过:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <configuration>
                <defaultLibBundleDir>APP-INF/lib</defaultLibBundleDir>
                <skinnyWars>true</skinnyWars>
                <version>6</version>
                <modules>
                    <webModule>
                        <groupId>${project.groupId}</groupId>
                        <artifactId>ecad-application-ws-webservice</artifactId>
                        <bundleFileName>ecad-application-ws-webservice.war</bundleFileName>
                        <contextRoot>/ecad-ws/ecadservice</contextRoot>
                    </webModule>
                </modules>

               <source>
                    project.properties['basedir']=project.properties['basedir'].replace('\\','/');
               </source>
            </configuration>
        </plugin>

但这并没有改变什么... 有没有其他的想法?

为什么你需要替换它?这是Java,不应该有问题吧? - khmarbaise
@khmarbaise 我正在使用jboss-as-maven插件来运行h2mem数据源的sql脚本。我需要${basedir}变量,因为该插件在ear模块中定义,因此不应包含资源(否则我可以使用classpath:scripts/create.sql)。<connection-url>jdbc:h2:mem:test;INIT=RUNSCRIPT FROM ${basedir}/src/scripts/create.sql;DB_CLOSE_DELAY=-1</connection-url>并且我忘了...在该插件中,${basedir}的结果是一个没有斜杠的字符串。 - GregD
2个回答

5

我使用了Groovy插件来解决这个问题:

<plugin>
            <groupId>org.codehaus.groovy.maven</groupId>
            <artifactId>gmaven-plugin</artifactId>
            <executions>
              <execution>
                <id>set-unixy_build_directory!</id>
                <phase>compile</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <classpath>
                    <element>
                      <groupId>commons-lang</groupId>
                      <artifactId>commons-lang</artifactId>
                      <version>2.4</version>
                     </element>
                  </classpath>
                  <source>
                    if (org.apache.commons.lang.SystemUtils.IS_OS_WINDOWS) {
                      project.properties.myDynamicProperty =
                      project.basedir.absolutePath.replace('\\','\\\\');
                    }
                  </source>
                </configuration>
              </execution>
            </executions>
        </plugin>

或者 project.basedir = project.basedir.replace('\', '\\'); replace() 方法返回一个新的字符串。你需要将 project.basedir 设置为这个新的字符串。 - Alex

1
你能看一下下面的代码是否有效吗?
替换

project.properties['basedir']=project.properties['basedir'].replace('\','/');

使用

pom.properties['main.basedir']=project.parent.basedir.absolutePath.replace('\','/');


不能工作。basedir没有被替换。它保持没有斜杠。(RUNSCRIPT FROM C:JAVADEVELOPMENTWORKSPACESECAD2ECAD2APPLICATIONWSEAR/SRC/SCRIPTS/CREATE.SQL ) ,应该是:RUNSCRIPT FROM C:/JAVADEVELOPMENT/WORKSPACES/ECAD2/ECAD2/APPLICATIONWS/EAR/SRC/SCRIPTS/CREATE.SQL。 - GregD
好的。那么请查看此链接:https://dev59.com/vHbZa4cB1Zd3GeqPFmxZ - Rajesh
没有改变任何东西。在我看来,basedir只是没有被改变.. 这样做是正确的方式吗..? - GregD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接