You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ant.apache.org by Tanguy Thomas <ta...@gmail.com> on 2015/01/03 18:58:04 UTC

Ant illegalArgumentException while trying to build automatic translations ("build-lang")

Dear all,

I am relatively new to Ant using, so may I may miss something obvious but I
tried to follow guidelines and search documentation without success.

When I add the <target name="build-lang">...</target-lang> I get an
IllegalArgumentException related to the lang.dir. Ant however does
something, it creates an English version (but not any other translation)
Language_en.properties, and says "build successful" after this exception.
In case this matters, I am using the JDK 1.8.0 (C:\Program
Files\Java\jdk1.8.0_25)

The build.xml is










*<project name="product-registration-TT-portlet" basedir="."
default="deploy"> <import file="../build-common-portlet.xml" /> <target
name="build-lang">  <antcall target="build-lang-cmd">   <param
name="lang.dir" value="docroot/WEB-INF/src/content" />   <param
name="lang.file" value="Language" />   <param name="lang.translate"
value="true" />  </antcall> </target></project>*

And the output is :


*F:\COEProjects\plugins\plugins-lia\portlets\product-registration-TT-portlet>antbuild-langBuildfile:
F:\COEProjects\plugins\plugins-lia\portlets\product-registration-TT-portlet\build.xml*
*build-lang:*





*build-lang-cmd:     [java] Exception in thread "main"
java.lang.IllegalArgumentException: Bad argument
docroot/WEB-INF/src/content     [java]     at
com.liferay.portal.tools.ArgumentsUtil.parseArguments(ArgumentsUtil.java:32)
[java]     at
com.liferay.portal.tools.LangBuilder.main(LangBuilder.java:57)     [java]
Java Result: 1*

*BUILD SUCCESSFULTotal time: 0 seconds*

Of course, the folder name is correct (and it somehow finds my files as it
creates the Language_en.properties file. I also tried to put backslashes
instead of foreward slashes, I tried to add in front or after the folder
name, to escape them etc. but nothing helps.

Please note that I searched on internet for example build.xml files, and as
I saw a parameter called "build-lang-cmd" I tried to add it. Though I have
no idea what it exactly tells, In that case strangely, I don't get the
exception, but I get lot of errors telling the client-id argument is
missing. As a result, all translation files are created, but they all
contain the original English content.

The build file in this example would be :























*<project name="product-registration-TT-portlet" basedir="."
default="deploy"> <import file="../build-common-portlet.xml" /> <target
name="build-lang">  <antcall target="build-lang-cmd">   <param
name="lang.dir" value="docroot/WEB-INF/src/content" />   <param
name="lang.file" value="Language" />   <param name="lang.translate"
value="true" />  </antcall> </target> <target name="build-lang-cmd"> <java
classname="com.liferay.portal.tools.LangBuilder"
classpathref="portal.classpath" fork="true" newenvironment="true">  <jvmarg
value="-Dexternal-properties=com/liferay/portal/tools/dependencies/portal-tools.properties"
/>  <jvmarg value="-Dfile.encoding=UTF-8" />  <jvmarg
value="-Duser.country=US" />  <jvmarg value="-Duser.language=en" />  <arg
value="lang.dir=${lang.dir}" />  <arg value="lang.file=${lang.file}"
/>  <arg value="lang.plugin=true" />  <arg
value="lang.translate=${lang.translate}" /> </java> <copy
file="${lang.dir}/${lang.file}.properties"
tofile="${lang.dir}/${lang.file}_en.properties" /> </target></project>*
I would get as output a lot of text such as :







*     [java] Correlation ID: 3c2e5a07-204a-47a3-a413-316ab512277c
[java] Timestamp: 2015-01-03 17:33:50Z     [java] Translating en_es
where-purchased-required Please tell us where youpurchased the product
[java]
com.liferay.portal.kernel.microsofttranslator.MicrosoftTranslatorException:
ACS90011: The required field 'client_id' is missing.     [java] Trace ID:
2ce232f9-4ada-4901-b61e-a8a65ae7d4d6*

I mainly would like to understand what goes wrong, I can use with or
without this extra "build-lang-cmd" but I would like to understand also
what I am doing by adding or omitting this.

Thank you very much for your help, and happy new year to whoever reads this
:)

-- 
Tanguy Thomas

Re: Ant illegalArgumentException while trying to build automatic translations ("build-lang")

Posted by Tanguy Thomas <ta...@gmail.com>.
Hi, thanks a lot for your feedback. I tried to use ${file.separator} as
separator, but it unfortunately did not solve the issue. What you explained
however helps me to move a bit forward, I know it's not this / vs \ isse at
least. I tried both methods, but ended up with the same
illegalArgumentException.

The code you found is the one being called indeed (it just seems to be
version 6.1.0 used here):
http://grepcode.com/file/repo1.maven.org/maven2/com.liferay.portal/portal-impl/6.1.0/com/liferay/portal/tools/LangBuilder.java/

This is coming with LiferayPortal CE 6.1 (I checked however if they updated
/ corrected anything there, but it seems newer versions (6.2 etc) have
exactly the same code:

public static void main(String[] args) {
   Map<String, String> arguments = ArgumentsUtil.parseArguments(args);
   System.setProperty("line.separator", StringPool.NEW_LINE);
   InitUtil.initWithSpring();
   String langDir = arguments.get("lang.dir");
   String langFile = arguments.get("lang.file");
   boolean langPlugin = GetterUtil.getBoolean(
    arguments.get("lang.plugin"));
   boolean langTranslate = GetterUtil.getBoolean(
    arguments.get("lang.translate"), true);
   try {
    new LangBuilder(langDir, langFile, langPlugin, langTranslate);
   }
   catch (Exception e) {
    e.printStackTrace();
   }
  }

The very first line seems to be throwing the exception :
ArgumentsUtil.parseArguments(args);
http://grepcode.com/file/repo1.maven.org/maven2/com.liferay.portal/portal-impl/6.1.0/com/liferay/portal/tools/ArgumentsUtil.java

 public static Map<String, String> parseArguments(String[] args) {
  Map<String, String> arguments = new ArgumentsMap();
  for (String arg : args) {
   int pos = arg.indexOf('=');
   if (pos <= 0) {
    throw new IllegalArgumentException("Bad argument " + arg);
   }
   String key = arg.substring(0, pos).trim();
   String value = arg.substring(pos + 1).trim();
   if (key.startsWith("-D")) {
    key = key.substring(2);
    System.setProperty(key, value);
   }
   else {
    arguments.put(key, value);
   }
  }
  return arguments;
 }

I indeed get this exact error message "Bad Argument " and then the folder I
passed, no matter if I use /, \ or the  ${file.separator}.

So it seems it's searching for a "=" sign but according to the
documentation, I am just supposed to put a directory name there.

I tried to start the argument with -D=(then my path) but it crashed, so I
tried to add some stuff after like -DIR=(then my path) (I could have put
-Dinosaur etc.) it seems and then it passed but crashed at the next
argument for same reason. It seems actually that Liferay changed the
translation system from Babelfish to Bing and that parameters changed. My
book (Liferay in Action) is still based on these parameters from before
this change, and I guess they added this "=" stuff afterwards.

So it's a Liferay issue, I could go till the end of this thanks to your
help, I was supposing the issue was coming from these / and \ problem.

Thanks a lot for your help



On Sat, Jan 3, 2015 at 3:56 PM, <sf...@nc.rr.com> wrote:

> Tanguy,
>
> I am completely unfamiliar with this package you are calling.
>
> But it looks like you are on a Windows machine and my guess is, the param
> you are handing in for the directory is being presented literally to the
> application - which is likely attempting to escape the characters vs
> utilizing them as directory separators.
>
> You may want to try this to see if it gets you passed your
> IllegalArgumentException:  simply use ${file.separator} vs the forward
> slash.  Something like this:
>
> <project name="product-registration-TT-portlet" basedir="."
> default="deploy">
>     <import file="../build-common-portlet.xml" />
>     <target name="build-lang">
>         <antcall target="build-lang-cmd">
>             <param name="lang.dir"
> value="docroot${file.separator}WEB-INF${file.separator}src${file.separator}content"
> />
>             <param name="lang.file" value="Language" />
>             <param name="lang.translate" value="true" />
>         </antcall>
>     target>
> </project>
>
> Or if you don't like that you can store as a property:
>
> <project name="product-registration-TT-portlet" basedir="."
> default="deploy">
>     <import file="../build-common-portlet.xml" />
>     <target name="build-lang">
>         <property name="DIR"
> value="docroot${file.separator}WEB-INF${file.separator}src${file.separator}content"/>
>
>         <antcall target="build-lang-cmd">
>             <param name="lang.dir" value=${DIR}" />
>             <param name="lang.file" value="Language" />
>             <param name="lang.translate" value="true" />
>         </antcall>
>     target>
> </project>
>
> I'm not sure it will fix your problem - but its a start.
>
> I did a preliminary google and found the code here:
> http://grepcode.com/file/repo1.maven.org/maven2/com.liferay.portal/portal-impl/6.0.5/com/liferay/portal/tools/LangBuilder.java
>
> Again - I don't know this code base whatsoever, but what's the download
> site for this?  Be easier to help if I can test against the library.
>
> ---- Tanguy Thomas <ta...@gmail.com> wrote:
> > Dear all,
> >
> > I am relatively new to Ant using, so may I may miss something obvious
> but I
> > tried to follow guidelines and search documentation without success.
> >
> > When I add the <target name="build-lang">...</target-lang> I get an
> > IllegalArgumentException related to the lang.dir. Ant however does
> > something, it creates an English version (but not any other translation)
> > Language_en.properties, and says "build successful" after this exception.
> > In case this matters, I am using the JDK 1.8.0 (C:\Program
> > Files\Java\jdk1.8.0_25)
> >
> > The build.xml is
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > *<project name="product-registration-TT-portlet" basedir="."
> > default="deploy"> <import file="../build-common-portlet.xml" /> <target
> > name="build-lang">  <antcall target="build-lang-cmd">   <param
> > name="lang.dir" value="docroot/WEB-INF/src/content" />   <param
> > name="lang.file" value="Language" />   <param name="lang.translate"
> > value="true" />  </antcall> </target></project>*
> >
> > And the output is :
> >
> >
> >
> *F:\COEProjects\plugins\plugins-lia\portlets\product-registration-TT-portlet>antbuild-langBuildfile:
> >
> F:\COEProjects\plugins\plugins-lia\portlets\product-registration-TT-portlet\build.xml*
> > *build-lang:*
> >
> >
> >
> >
> >
> > *build-lang-cmd:     [java] Exception in thread "main"
> > java.lang.IllegalArgumentException: Bad argument
> > docroot/WEB-INF/src/content     [java]     at
> >
> com.liferay.portal.tools.ArgumentsUtil.parseArguments(ArgumentsUtil.java:32)
> > [java]     at
> > com.liferay.portal.tools.LangBuilder.main(LangBuilder.java:57)     [java]
> > Java Result: 1*
> >
> > *BUILD SUCCESSFULTotal time: 0 seconds*
> >
> > Of course, the folder name is correct (and it somehow finds my files as
> it
> > creates the Language_en.properties file. I also tried to put backslashes
> > instead of foreward slashes, I tried to add in front or after the folder
> > name, to escape them etc. but nothing helps.
> >
> > Please note that I searched on internet for example build.xml files, and
> as
> > I saw a parameter called "build-lang-cmd" I tried to add it. Though I
> have
> > no idea what it exactly tells, In that case strangely, I don't get the
> > exception, but I get lot of errors telling the client-id argument is
> > missing. As a result, all translation files are created, but they all
> > contain the original English content.
> >
> > The build file in this example would be :
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > *<project name="product-registration-TT-portlet" basedir="."
> > default="deploy"> <import file="../build-common-portlet.xml" /> <target
> > name="build-lang">  <antcall target="build-lang-cmd">   <param
> > name="lang.dir" value="docroot/WEB-INF/src/content" />   <param
> > name="lang.file" value="Language" />   <param name="lang.translate"
> > value="true" />  </antcall> </target> <target name="build-lang-cmd">
> <java
> > classname="com.liferay.portal.tools.LangBuilder"
> > classpathref="portal.classpath" fork="true" newenvironment="true">
> <jvmarg
> >
> value="-Dexternal-properties=com/liferay/portal/tools/dependencies/portal-tools.properties"
> > />  <jvmarg value="-Dfile.encoding=UTF-8" />  <jvmarg
> > value="-Duser.country=US" />  <jvmarg value="-Duser.language=en" />  <arg
> > value="lang.dir=${lang.dir}" />  <arg value="lang.file=${lang.file}"
> > />  <arg value="lang.plugin=true" />  <arg
> > value="lang.translate=${lang.translate}" /> </java> <copy
> > file="${lang.dir}/${lang.file}.properties"
> > tofile="${lang.dir}/${lang.file}_en.properties" /> </target></project>*
> > I would get as output a lot of text such as :
> >
> >
> >
> >
> >
> >
> >
> > *     [java] Correlation ID: 3c2e5a07-204a-47a3-a413-316ab512277c
> > [java] Timestamp: 2015-01-03 17:33:50Z     [java] Translating en_es
> > where-purchased-required Please tell us where youpurchased the product
> > [java]
> >
> com.liferay.portal.kernel.microsofttranslator.MicrosoftTranslatorException:
> > ACS90011: The required field 'client_id' is missing.     [java] Trace ID:
> > 2ce232f9-4ada-4901-b61e-a8a65ae7d4d6*
> >
> > I mainly would like to understand what goes wrong, I can use with or
> > without this extra "build-lang-cmd" but I would like to understand also
> > what I am doing by adding or omitting this.
> >
> > Thank you very much for your help, and happy new year to whoever reads
> this
> > :)
> >
> > --
> > Tanguy Thomas
>



-- 
Tanguy Thomas

Re: Ant illegalArgumentException while trying to build automatic translations ("build-lang")

Posted by sf...@nc.rr.com.
Tanguy,

I am completely unfamiliar with this package you are calling.

But it looks like you are on a Windows machine and my guess is, the param you are handing in for the directory is being presented literally to the application - which is likely attempting to escape the characters vs utilizing them as directory separators.

You may want to try this to see if it gets you passed your IllegalArgumentException:  simply use ${file.separator} vs the forward slash.  Something like this:

<project name="product-registration-TT-portlet" basedir="." default="deploy">
    <import file="../build-common-portlet.xml" />
    <target name="build-lang">
        <antcall target="build-lang-cmd">
            <param name="lang.dir" value="docroot${file.separator}WEB-INF${file.separator}src${file.separator}content" />
            <param name="lang.file" value="Language" />
            <param name="lang.translate" value="true" />
        </antcall>
    target>
</project>

Or if you don't like that you can store as a property:

<project name="product-registration-TT-portlet" basedir="." default="deploy">
    <import file="../build-common-portlet.xml" />
    <target name="build-lang">
        <property name="DIR" value="docroot${file.separator}WEB-INF${file.separator}src${file.separator}content"/>

        <antcall target="build-lang-cmd">
            <param name="lang.dir" value=${DIR}" />
            <param name="lang.file" value="Language" />
            <param name="lang.translate" value="true" />
        </antcall>
    target>
</project>

I'm not sure it will fix your problem - but its a start.

I did a preliminary google and found the code here:  http://grepcode.com/file/repo1.maven.org/maven2/com.liferay.portal/portal-impl/6.0.5/com/liferay/portal/tools/LangBuilder.java

Again - I don't know this code base whatsoever, but what's the download site for this?  Be easier to help if I can test against the library.

---- Tanguy Thomas <ta...@gmail.com> wrote: 
> Dear all,
> 
> I am relatively new to Ant using, so may I may miss something obvious but I
> tried to follow guidelines and search documentation without success.
> 
> When I add the <target name="build-lang">...</target-lang> I get an
> IllegalArgumentException related to the lang.dir. Ant however does
> something, it creates an English version (but not any other translation)
> Language_en.properties, and says "build successful" after this exception.
> In case this matters, I am using the JDK 1.8.0 (C:\Program
> Files\Java\jdk1.8.0_25)
> 
> The build.xml is
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> *<project name="product-registration-TT-portlet" basedir="."
> default="deploy"> <import file="../build-common-portlet.xml" /> <target
> name="build-lang">  <antcall target="build-lang-cmd">   <param
> name="lang.dir" value="docroot/WEB-INF/src/content" />   <param
> name="lang.file" value="Language" />   <param name="lang.translate"
> value="true" />  </antcall> </target></project>*
> 
> And the output is :
> 
> 
> *F:\COEProjects\plugins\plugins-lia\portlets\product-registration-TT-portlet>antbuild-langBuildfile:
> F:\COEProjects\plugins\plugins-lia\portlets\product-registration-TT-portlet\build.xml*
> *build-lang:*
> 
> 
> 
> 
> 
> *build-lang-cmd:     [java] Exception in thread "main"
> java.lang.IllegalArgumentException: Bad argument
> docroot/WEB-INF/src/content     [java]     at
> com.liferay.portal.tools.ArgumentsUtil.parseArguments(ArgumentsUtil.java:32)
> [java]     at
> com.liferay.portal.tools.LangBuilder.main(LangBuilder.java:57)     [java]
> Java Result: 1*
> 
> *BUILD SUCCESSFULTotal time: 0 seconds*
> 
> Of course, the folder name is correct (and it somehow finds my files as it
> creates the Language_en.properties file. I also tried to put backslashes
> instead of foreward slashes, I tried to add in front or after the folder
> name, to escape them etc. but nothing helps.
> 
> Please note that I searched on internet for example build.xml files, and as
> I saw a parameter called "build-lang-cmd" I tried to add it. Though I have
> no idea what it exactly tells, In that case strangely, I don't get the
> exception, but I get lot of errors telling the client-id argument is
> missing. As a result, all translation files are created, but they all
> contain the original English content.
> 
> The build file in this example would be :
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> *<project name="product-registration-TT-portlet" basedir="."
> default="deploy"> <import file="../build-common-portlet.xml" /> <target
> name="build-lang">  <antcall target="build-lang-cmd">   <param
> name="lang.dir" value="docroot/WEB-INF/src/content" />   <param
> name="lang.file" value="Language" />   <param name="lang.translate"
> value="true" />  </antcall> </target> <target name="build-lang-cmd"> <java
> classname="com.liferay.portal.tools.LangBuilder"
> classpathref="portal.classpath" fork="true" newenvironment="true">  <jvmarg
> value="-Dexternal-properties=com/liferay/portal/tools/dependencies/portal-tools.properties"
> />  <jvmarg value="-Dfile.encoding=UTF-8" />  <jvmarg
> value="-Duser.country=US" />  <jvmarg value="-Duser.language=en" />  <arg
> value="lang.dir=${lang.dir}" />  <arg value="lang.file=${lang.file}"
> />  <arg value="lang.plugin=true" />  <arg
> value="lang.translate=${lang.translate}" /> </java> <copy
> file="${lang.dir}/${lang.file}.properties"
> tofile="${lang.dir}/${lang.file}_en.properties" /> </target></project>*
> I would get as output a lot of text such as :
> 
> 
> 
> 
> 
> 
> 
> *     [java] Correlation ID: 3c2e5a07-204a-47a3-a413-316ab512277c
> [java] Timestamp: 2015-01-03 17:33:50Z     [java] Translating en_es
> where-purchased-required Please tell us where youpurchased the product
> [java]
> com.liferay.portal.kernel.microsofttranslator.MicrosoftTranslatorException:
> ACS90011: The required field 'client_id' is missing.     [java] Trace ID:
> 2ce232f9-4ada-4901-b61e-a8a65ae7d4d6*
> 
> I mainly would like to understand what goes wrong, I can use with or
> without this extra "build-lang-cmd" but I would like to understand also
> what I am doing by adding or omitting this.
> 
> Thank you very much for your help, and happy new year to whoever reads this
> :)
> 
> -- 
> Tanguy Thomas

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org