2010-12-04 33 views
6

J'ai un pom.xml avec propriété définie module.basedir qui est destiné à contenir transformé basedir propriété. Il est défini comme suit:

Et j'ai le code suivant qui est exécuté en utilisant le plugin mgroovy:

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

Plus tard, j'utiliser cette propriété dans d'autres plug-ins. Cela fonctionne bien jusqu'à ce que je déplace les définitions de plugin dans le profil maven. Et quand le profil maven est activé, le plugin mgroovy fonctionne bien, mais quand j'accède à la propriété dans le plugin suivant, je reçois la valeur non modifiée.

Voilà comment j'accéder à cette propriété:

${module.basedir} 

Il ressemble que lorsque le profil est exécuté, il crée des copies propres des propriétés définies dans le projet et ils sont utilisés lorsqu'ils sont référencés dans les plugins.

Des suggestions?

Répondre

0
String path = '\\a\\b\\c' 
assert path.replaceAll('\\\\', '/') == '/a/b/c' 

Vous devez remplacer cette ligne:

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

avec

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

La raison pour laquelle vous avez besoin 4 antislashs, est parce que chacun des slashes dans la chaîne source (path dans mon exemple) doit être échappé.

+0

Ce n'est pas le cas, je peux voir la chaîne a changé dans la sortie. Le fait est que lorsque j'écris ** print $ {module.basedir} **, j'ai toujours la valeur d'origine. –

2

J'ai rencontré le même problème en utilisant gmaven-plugin sur Windows pour créer une description du module EJB. Je ne suis pas un savvy dans Groovy, mais cette approche fonctionne pour moi:

def basedir = project.properties['module.basedir'].replace('\\','/') 
def md = (basedir + "/target/module.xml" as File)